học sinh – sinh viên.
2.4. Danh sách hạn chế.2.4.1. Ngăn xếp (Stack). 2.4.1. Ngăn xếp (Stack). 2.4.1.1. Định nghĩạ
Ngăn xếp (Stack) là một danh sách tuyến tính mà cả hai phép thêm vào và loại bỏ phần tử đều tiến hành 1 đầu của danh sách.
Như vậy phần tử nào được thêm vào sau, thì loại bỏ trước, vì vậy Stack còn gọi là danh sách LIFO (Last In First Out).
Vi dụ: Hình ảnh của một chồng đĩạ
- Đỉnh (top) của một stack là nơi thêm vào hay loại bỏ một phần tử khỏi stack. - Đáy (Bottom) của một stack là nơi chứa phần tử khó truy xuất nhất, và nó sẽ không bị loại bỏ cho đến khi tất cả các phần tử khác bị loại bỏ.
2.4.1.2. Biểu diễn ngăn xếp.ạ Biểu diễn Stack dùng mảng ạ Biểu diễn Stack dùng mảng
Ta có thể tạo một stack bằng cách khai báo một mảng 1 chiều với kích thước tối đa là N (ví dụ, N có thể bằng 1000).
VD:
Tạo stack S và quản lý đỉnh stack bằng biến T. Nếu T là địa chỉ của phần tử đỉnh của stack thì T sẽ có giá trị biến đổi khi stack hoạt động. Như vậy khi stack rỗng thì T=0. Một phần tử được bổ sung vào Stack thì T sẽ tăng lên một đơn vị. Khi một phần tử bị loại bỏ khỏi stack thì T se giảm đi một đơn vị.
b. Biểu diễn Stack dùng danh sách liên kết đơn.
Việc cài đặt stack bằng cách dùng danh sách móc nối là khá tự nhiên. Chẳng hạn với danh sách móc nối đơn trỏ bởi First thì có thể coi first như con trỏ trỏ tới đỉnh stack. Bổ sung một nút vào stack chính là bổ sung mộ nút vòa thành nút đầu tiên của danh sách, loại bỏ một nút ra khỏi stack chính là loại bỏ nút đầu tiên của danh sách. Trong thủ tục bổ sung với stack móc nối ta không phải kiểm tra hiện tượng Tràn như đối với stack tổ chức bằng mảng, vì stack móc nối không hề bị giới hạn về kích thước, nó chỉ phụ thuộc vào giới hạn của bộ nhớ.
Stack là một danh sách liên kết được khai báo như sau: Type Tro = ^nut; Nut = record Info : element; Link : tro; End;
Var
Sp : Tro;{Sp trỏ đến đầu ngăn xếp}
2.4.1.3. Các thao tác.
ạ Dùng cấu trúc mảng để biểu diễn ngăn xếp.