BÀI 6. CÁC THUẬT TOÁN VỚI NGĂN XẾP
Trang 2
TỔNG HỢP CÁC CẤU TRÚC DỮ LIỆU
Cấu trúc
dữ liệu
Tuyến tính
Truy cập ngẫu
nhiên/trực tiếp
Thành phần
đồng nhất Mảng (Array)
Thành phần
không đồng nhất Bản ghi
(Record)
Truy cập tuần tự
Tổng quát Danh sách liên
kết (List)
Vào-trước-ra-
trước Hàng đợi
(Queue)
Vào-sau-ra-trước Ngăn xếp
(Stack)
Không tuyến tính Tập hợp (Set)
2
Trang 3
NGĂN XẾP
Ngăn xếp là gì?
Là một danh sách nhưng các phép toán chỉ được thực hiện ở một đỉnh
của danh sách.
Tính chất
Vào trước ra sau (First In Last Out: FILO)
3
Trang 4
NGĂN XẾP
Trừu tượng hóa cấu trúc ngăn xếp
Đặc tả dữ liệu
A = (a0, a1, …, an-1)
trong đó an-1 đỉnh ngăn xếp
Đặc tả các phép toán
1. Thêm phần tử x vào đỉnh ngăn xếp: push(x)
2. Loại phần tử đỉnh ngăn xếp: pop()
3. Kiểm tra ngăn xếp rỗng hay không: isEmpty()
4. Kiểm tra ngăn xếp đầy hay không: isFull()
5. Đếm số phần tử của ngăn xếp: size()
6. Trả về phần tử đỉnh ngăn xếp: top()
4
Trang 5
Biểu diễn liên tục: các phần tử dữ liệu của ngăn xếp được lưu trữ liên tục nhau
trong bộ nhớ (Mảng).
Biểu diễn rời rạc: các phần tử dữ liệu của ngăn xếp được lưu trữ rời rạc nhau
trong bộ nhớ (Danh sách liên kết).
Ví dụ. Biểu diễn ngăn xếp dựa vào mảng.
typedef struct {
int top; //Đỉnh đầu của stack nơi diễn ra mọi thao tác
int node[MAX]; //Dữ liệu lưu trữ trong stack gồm MAX phần tử
} Stack;
top
top
top
node[top]
node[top]
node[top]
Hai phương pháp biểu diễn ngăn xếp