Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 - Th.S Thiều Quang Trung

20 10 0
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 - Th.S Thiều Quang Trung

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Thiều Quang Trung Bộ môn Khoa học cơ bản Trường Cao đẳng Kinh tế Đối ngoại... Thao tác thêm - Push vào Stack.[r]

(1)

CHƯƠNG

KIỂU NGĂN XẾP, HÀNG ĐỢI, Đ QUY

(2)

• Khái niệm ngăn xếp

1

• Phương pháp xây dựng stack

2

• Các thao tác stack

3

• Kiểu queue - hàng đợi

4

• Các thao tác queue

5

• Đệ qui tốn đệ qui

6

(3)

Ngăn xếp - Định nghĩa

• Stack cấu trúc:

– Gồm nhiều phần tử

– Hoạt động theo chế “Vào sau – Ra trước” (LIFO – Last In, First Out)

(4)

Thao tác 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 phần tử vào Stack

Pop: lấy phần tử khỏi Stack

(5)

Thao tác thêm - Push vào Stack

Top

(6)

Thao tác lấy - Pop khỏi stack

Top

(7)

Ví dụ thêm xóa phần tử stack

Cần nhập số vào

Ban đầu Nhập

1 Nhập 5 Nhập 7 Nhập

Lấy =>

1

Lấy =>

1

Lấy =>

1

Lấy =>

1

(8)

Cách xây dựng Stack

Mảng chiều Danh sách liên kết

 Viết chương trình dễ dàng, nhanh chóng

 Bị hạn chế số lượng phần tử cố định

 Tốn chi phí tái cấp phát chép vùng nhớ sử dụng mảng động

 Phức tạp triển khai chương trình

(9)

Stack – Sử dụng mảng

9

9 3 6

0

Stack

(10)

Stack số nguyên – Sử dụng mảng

struct ttStack {

int* StkArray; // mảng chứa phần tử

int StkMax; // số phần tử tối đa

int StkTop; // vị trí đỉnh Stack

};

(11)

Stack 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;

(12)

Stack 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;

(14)

Stack số nguyên – Sử dụng mảng

bool Push (STACK &s, int newitem) {

if (IsFull(s))

return false; s.StkTop++;

(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 ;

(16)

Bài tập

• Viết hàm nhập xuất Stack số nguyên

• Khai báo cấu trúc viết hàm tạo Stack từ chuỗi ký tự str (mỗi phần tử Stack ký tự) • Khai báo cấu trúc viết hàm tạo Stack từ

(17)

Stack – Ví dụ ứng dụng

• Kiểm tra tương ứng cặp ngoặc đơn biểu thức

• ( ( A + B ) / C ( A + B ) / C)

• Đảo ngược chuỗi ký tự

• Kinh tế Đối ngoại  iạogn iốĐ ết hniK

(18)

Stack – Sử dụng DSLK

9

4

N

StkCnt StkTop

7

Data Link

9

Data Link

(19)

Stack – Sử dụng DSLK

• Cấu tạo đầu stack

• Cấu tạo phần tử

N

StkCnt StkTop

Data Link

stack

StkCnt <integer>

StkTop <node pointer> end stack

node

Data <datatype>

(20)

Stack số nguyên – Sử dụng DSLK

typedef struct tagSTACK_NODE {

int Data;

tagSTACK_NODE *pNext; } STACK_NODE;

typedef struct STACK {

int StkCount;

Ngày đăng: 11/03/2021, 13:19

Tài liệu cùng người dùng

Tài liệu liên quan