Tải bản đầy đủ (.pptx) (64 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 (2016)

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 (611.77 KB, 64 trang )

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


×