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;