Chương 3. Tổ chức ngăn xếp
(Stack) & Hàng đợi (Queue) trên
mảng một chiều
Trần Minh Thái
Email:
Website: www.minhthai.edu.vn
1
Nội dung
Trình bày khái niệm Ngăn xếp (Stack) và Hàng đợi
(Queue)
Các thao tác trên Ngăn xếp và Hàng đợi
Minh họa các ứng dụng
2
Ngăn xếp
Ngăn xếp là gì?
Cách khai báo cấu trúc ngăn xếp dùng mảng một
chiều?
Các ứng dụng
Cài đặt
3
Ví dụ về Ngăn xếp
Thành phần được lấy ra đầu tiên?
4
Khái niệm Stack
Gồm nhiều phần tử lưu trữ theo thứ tự
Hoạt động theo cơ chế “Vào sau – Ra trước” (LIFO
– Last In, First Out)
Đỉnh
ngăn
xếp
5
Thao tác cơ bản trên Stack
InitStack: khởi tạo Stack rỗng
IsEmpty: kiểm tra Stack rỗng?
Push
Pop
IsFull: kiểm tra Stack đầy?
Push: thêm 1 phần tử vào Stack
Pop: lấy ra 1 phần tử khỏi Stack
6
PUSH
Thao tác Push vào Stack
Top
7
Thao tác Pop khỏi stack
Top
POP
8
Stack – Sử dụng mảng
Top
C
B
A
Stack
B
C
0
1
2
Top
A
3
4
5
6
7
8
9
9
Ngăn xếp – Sử dụng mảng
A
B
Top A
C
Top B
A
D
Top C
B
A
E
Top D
C
B
A
Top
D
C
B
A
Top
10
Ví dụ, Ngăn xếp chứa số nguyên – Sử
dụng mảng
struct ttStack
{
int* StkArray; // mảng chứa các phần tử
int StkMax; // số phần tử tối đa
int StkTop; // vị trí đỉnh Stack
};
typedef struct ttStack STACK;
11
Ngăn xếp số nguyên – Sử dụng mảng
int InitStack(STACK& s, int MaxItems)
{
s.StkArray = new int[MaxItems];
if (s.StkArray == NULL)
return 0;
s.StkMax = MaxItems;
s.StkTop = -1;
return 1; //Khởi tạo thành công
}
12
Ngăn xếp số nguyên – Sử dụng mảng
int IsEmpty(const STACK &s)
{
if (s.StkTop==-1)
return 1;
return 0;
}
13
Stack số nguyên – Sử dụng mảng
int IsFull(const STACK &s)
{
if (s.StkTop==s.StkMax-1)
return 1;
return 0;
}
14
Stack số nguyên – Sử dụng mảng
int Push (STACK &s, int newitem)
{
if (IsFull(s)==1)
return 0;
s.StkTop++;
s.StkArray[s.StkTop] = newitem;
return 1;
}
15
Stack số nguyên – Sử dụng mảng
int Pop(STACK &s, int &outitem)
{
if (IsEmpty(s))
return 0;
outitem = s.StkArray[s.StkTop];
s.StkTop--;
return 1;
}
16
Bài tập
Viết hàm nhập, xuất Stack số nguyên dương sao cho:
Cho phép người dùng lần lượt nhập vào Stack các số
nguyên dương
Nếu nhập vào giá trị <=0 thì kết thúc quá trình nhập
17
Stack – Ứng dụng
Kiểm tra sự tương ứng của các cặp ngoặc đơn trong
một biểu thức
( ( A + B ) / C ?
?
( A + B ) / C)
Đảo ngược một chuỗi ký tự
Cá Ăn Kiến
nếiK nĂ áC
18
Stack – Ứng dụng
Lưu vết trong thuật toán “back-tracking” (theo dõi
dấu vết)
Tính giá trị biểu thức tốn học
Khử đệ quy
…
19
Bài toán tháp HaNoi
Towers of Hanoi
Towers of Hanoi
Towers of Hanoi
Towers of Hanoi
Towers of Hanoi