- Ngăn xếp là một dạng đặc biệt của danh sách mà việc bổ sung hay loại bỏ một phần tử đều đƣợc thực hiện ở 1 đầu của danh sách. Ngăn xếp còn đƣợc gọi là kiểu dữ liệu có nguyên tắc LIFO (Last In First Out - Vào sau ra trƣớc).
- Ngăn xếp có thể đƣợc cài đặt bằng mảng hoặc danh sách liên kết.
- Các thao tác cơ bản trên ngăn xếp bao gồm: Khởi tạo ngăn xếp, kiểm tra ngăn xếp rỗng (đầy), thêm 1 phần tử vào ngăn xếp, loại bỏ 1 phần tử khỏi ngăn xếp.
- Hàng đợi là một cấu trúc dữ liệu gần giống với ngăn xếp, nhƣng phần tử đƣợc lấy ra khỏi hàng đợi không phải là phần tử mới nhất đƣợc đƣa vào mà là phần tử đã đƣợc lƣu trong hàng đợi lâu nhất. Quy luật của hàng đợi là vào trƣớc ra trƣớc (FIFO - First In First Out). - Hàng đợi cũng có thể đƣợc cài đặt bằng mảng hoặc danh sách liên kết. Các thao tác cơ bản
cũng bao gồm: Khởi tạo hàng đợi, kiểm tra hàng đợi rỗng (đầy), thêm 1 phần tử vào hàng đợi, loại bỏ 1 phần tử khỏi hàng đợi.
4.4CÂU HỎI VÀ BÀI TẬP
1. Để cài đặt ngăn xếp bằng mảng 1 chiều, ta cần bố trí ngăn xếp trong mảng nhƣ thế nào? Cần dùng thêm các biến phụ nào?
2. Hạn chế của cài đặt ngăn xếp bằng mảng so với danh sách liên kết là gì? 3. Để cài đặt ngăn xếp bằng danh sách liên kết cần bố trí danh sách nhƣ thế nào? 4. Hoàn thiện mã nguồn của chƣơng trình tính biểu thƣc dạng hậu tố.
5. Hoàn thiện mã nguồn chƣơng trình chuyển đổi biểu thức dạng trung tố sang hậu tố. 6. Viết chƣơng trình đổi 1 số nguyên từ hệ thập phân sang nhị phân sử dụng ngăn xếp. 7. Sự khác biệt cơ bản giữa hàng đợi và ngăn xếp là gì?
8. Hoàn thiện mã nguồn của chƣơng trình cài đặt ngăn xếp bằng mảng và danh sách liên kết bao gồm khai báo và các thao tác nhƣ hƣớng dẫn trong tài liệu.
9. Hoàn thiện mã nguồn của chƣơng trình cài đặt hàng đợi bằng mảng và danh sách liên kết bao gồm khai báo và các thao tác nhƣ hƣớng dẫn trong tài liệu.
CHƢƠNG 5
CẤU TRÚC DỮ LIỆU KIỂU CÂY
Chƣơng 5 giới thiệu một cấu trúc dữ liệu rất gần gũi và có nhiều ứng dụng trong thực tế, đó là cấu trúc dữ liệu kiểu cây.
Các nội dung chính đƣợc trình bày trong chƣơng bao gồm: - Định nghĩa và các khái niệm về cây.
- Cài đặt cây : Cài đặt bằng mảng hoặc danh sách liên kết. - Phép duyệt cây: Duyệt thứ tự trƣớc, thứ tự giữa, và thứ tự sau.
Ngoài ra, chƣơng này còn giới thiệu một loại cây đặc biệt, có nhiều ứng dụng trong thực tiễn và nghiên cứu khoa học, đó là cây nhị phân. Loại cây đặc biệt hơn nữa là cây nhị phân tìm kiếm sẽ đƣợc giới thiệu trong chƣơng 7.
5.1KHÁI NIỆM
Cây là một cấu trúc dữ liệu có vai trò quan trọng trong việc phân tích và thiết kế các thuật toán. Lƣu trữ và biểu diễn dữ liệu kiểu cây có thể thấy trong nhiều lĩnh vực của cuộc sống. Ví dụ một cuốn gia phả lƣu trữ thông tin về các thành viên trong một dòng họ, trong đó các thành viên thức bậc khác nhau đƣợc phân thành các cấp khác nhau trong biểu diễn hình cây của gia phả. Sơ đồ tổ chức của 1 đơn vị cũng thƣờng đƣợc biểu diễn thông qua cấu trúc cây. Các đơn vị con nằm ở cấp dƣới đơn vị trực tiếp quản lý. Các đơn vị ngang hàng nằm cùng cấp. Trong lĩnh vực máy tính, cách lƣu trữ dữ liệu của hệ điều hành cũng áp dụng kiểu lƣu trữ cây. Các tệp tin đƣợc lƣu trữ trong các cây thƣ mục, trong đó các thƣ mục con nằm trong các thƣ mục cha.
Cây có thể đƣợc định nghĩa nhƣ sau:
Cây là một tập hợp các nút (các đỉnh) và các cạnh, thỏa mãn một số yêu cầu nào đó. Mỗi nút của cây đều có 1 định danh và có thể mang thông tin nào đó. Các cạnh dùng để liên kết các nút với nhau. Một đƣờng đi trong cây là một danh sách các đỉnh phân biệt mà đỉnh trƣớc có liên kết với đỉnh sau.
Một tính chất rất quan trọng hình thành nên cây, đó là có đúng một đƣờng đi nối 2 nút bất kỳ trong cây. Nếu tồn tại 2 nút trong cây mà có ít hoặc nhiều hơn 1 đƣờng đi thì ta có một đồ thị (sẽ xem xét ở chƣơng sau).
Mỗi cây thƣờng có một nút đƣợc gọi là nút gốc. Mỗi nút đều có thể coi là nút gốc của cây con bao gồm chính nó và các nút bên dƣới nó. Trong biểu diễn hình học của cây, nút gốc thƣờng nằm ở vị trí cao nhất, tiếp theo là các nút kế tiếp.
Hình 5.1 Cây
Nhƣ vậy ta có thể thấy rằng cây bao gồm gốc và các cây con nối với gốc. Qua đó, ta có thể định nghĩa cây dƣới dạng đệ qui nhƣ sau. Cây có thể là:
- Một nút đứng riêng lẻ (và nó chính là gốc của cây này). - Hoặc một nút kết hợp với một số cây con bên dƣới.
Mỗi nút trong cây (trừ nút gốc) có đúng 1 nút nằm trên nó, gọi là nút cha (parent). Các nút nằm ngay dƣới nút đó đƣợc gọi là các nút con (subnode). Các nút nằm cùng cấp đƣợc gọi là các nút anh em (sibling). Nút không có nút con nào đƣợc gọi là nút lá (leaf) hoặc nút tận cùng.
Chiều cao của nút là đƣờng đi dài nhất từ nút tới một lá. Chiều cao của cây chính là chiều cao của nút gốc. Độ sâu của 1 nút là độ dài đƣờng đi duy nhất giữa nút gốc và nút đó.
Một cây đƣợc gọi là có thứ tự nếu các nút con của 1 nút đƣợc bố trí theo thứ tự nào đó. Ngƣợc lại gọi là cây không có thứ tự.