Tải bản đầy đủ (.pptx) (43 trang)

Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 3 - Trần Minh Thái (Trường Đại học Hồng Bàng )

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (247.29 KB, 43 trang )

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
bool InitStack(STACK& s, int MaxItems)
{
s.StkArray = new int[MaxItems];
if (s.StkArray == NULL)
return false;
s.StkMax = MaxItems;
s.StkTop = -1;
return true;
}
12


Ngăn xếp số nguyên – Sử dụng mảng
bool IsEmpty(const STACK &s)
{
if (s.StkTop==-1)
return true;
return false;

}

13


Stack số nguyên – Sử dụng mảng
bool IsFull(const STACK &s)
{
if (s.StkTop==s.StkMax-1)
return true;
return false;
}

14


Stack số nguyên – Sử dụng mảng
bool Push (STACK &s, int newitem)
{
if (IsFull(s))
return false;
s.StkTop++;
s.StkArray[s.StkTop] = newitem;
return true;
}
15


Stack số nguyên – Sử dụng mảng
bool Pop(STACK &s, int &outitem)

{
if (IsEmpty(s))
return false;
outitem = s.StkArray[s.StkTop];
s.StkTop--;
return true;
}
16


Bài tập
Viết hàm nhập và xuất Stack số nguyên
Khai báo cấu trúc và viết hàm tạo Stack từ chuỗi ký
tự str (mỗi phần tử Stack là ký tự)
Khai báo cấu trúc và viết hàm tạo Stack từ chuỗi ký
tự str (mỗi phần tử Stack là một từ - từ cách nhau
bởi khoảng trắng)

17


Stack – Ví dụ ứ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
Stack có nhiều ứng dụng:
Lưu vết trong thuật tốn “back-tracking” (theo dõi
dấu vết)
Tính giá trị biểu thức toán học (thuật toán Balan
ngược)
Khử đệ quy
…

19


Stack – Quick Sort
Để khử đệ quy cho Quick Sort, ta sử dụng một stack để
lưu lại các partition (phân hoạch) cần tiến hành sắp
xếp.
Ý tưởng:
Push phân hoạch đầu tiên (0, n-1) vào stack
Trong khi stack chưa rỗng
Pop một phân hoạch từ stack

Chọn phần tử trục trên phân hoạch này
Điều chỉnh phân hoạch tương ứng với trục
Push 2 phân hoạch bên trái và phải trục vào stack
20


Stack – Quick Sort
 Push phân hoạch đầu tiên (0, n-1) vào stack
 Trong khi stack chưa rỗng
 Pop một phân hoạch từ stack
 Chọn phần tử trục trên phân hoạch này
 Điều chỉnh phân hoạch tương ứng với trục
 Push 2 phân hoạch bên trái và phải trục vào stack

Stack rỗng
Stop

(3,4)
(0,4)
(0,1)

t

1

35

4

57


753

0

1

2

3

4

i

j
21


Queue
Phòng vé

22


Queue – Định nghĩa
Hàng đợi là một cấu trúc:
Gồm nhiều phần tử có thứ tự
Hoạt động theo cơ chế “Vào trước, ra trước”
(FIFO - First In First Out)


23


Queue – Định nghĩa
Các thao tác cơ bản trên hàng đợi:

InitQueue: khởi tạo hàng đợi rỗng
IsEmpty: kiểm tra hàng đợi rỗng?
IsFull: kiểm tra hàng đợi đầy?
EnQueue: thêm 1 phần tử vào cuối hàng
đợi, có thể làm hàng đợi đầy
DeQueue: lấy ra 1 phần tử từ đầu Queue,
có thể làm Queue rỗng
24


Queue
Minh họa thao tác EnQueue

Minh họa thao tác DeQueue

25


×