Chương 3. Tổ chức ngăn xếp (Stack) & Hàng đợi (Queue)
trên mảng một chiều (3t)
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
Tổ chức dữ liệu dùng mảng 1 chiều
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?
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
Push
6
Pop
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
3
4
5
6
7
Top
A
9
8
9
Ngăn xếp – Sử dụng mảng
E
D
D
D
C
C
C
B
B
B
B
A
A
A
A
C
B
A
Top
A
Top
Top
Top
Top
10
Top
Ví dụ ngăn xếp chứa số nguyên dương
class CMyStack
{
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
//Các phương thức xử lý
}
11
Ngăn xếp số nguyên – Khởi tạo
public bool InitStack(int MaxItems)
{
StkArray = new int[MaxItems];
if (StkArray == null)
return false;
StkMax = MaxItems;
StkTop = -1;
return true;
}
12
Ngăn xếp số nguyên – Kiểm tra rỗng
public bool IsEmpty()
{
if (StkTop==-1)
return true;
return false;
}
13
Stack số nguyên – Kiểm tra đầy
public bool IsFull()
{
if (StkTop==StkMax-1)
return true;
return false;
}
14
Stack số nguyên – Thêm vào stack
public bool Push (int newitem)
{
if (IsFull())
return false;
StkTop++;
StkArray[StkTop] = newitem;
return true;
}
15
Stack số nguyên – Lấy phần tử khỏi stack
public int Pop()
{
if (IsEmpty())
return -1;
int outitem = StkArray[StkTop];
StkTop--;
return outitem;
}
16
Bài tập
Viết phương thức nhập và xuất Stack số nguyên dương. Yêu cầu:
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
Đảo ngược một chuỗi ký tự
?
Cá Ăn Kiến
( A + B ) / C)
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