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]
Trang 1CHƯƠNG 5
KIỂU NGĂN XẾP, HÀNG ĐỢI, ĐỆ QUY
GV Th.S Thiều Quang Trung
Bộ môn Khoa học cơ bản Trường Cao đẳng Kinh tế Đối ngoại
Trang 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 cơ bản trên stack
3
• Kiểu queue - hàng đợi
4
• Các thao tác cơ bản trên queue
5
• Đệ qui và các bài toán đệ qui
6
Nội dung
Trang 3Ngăn xếp - Định nghĩa
• Stack là 1 cấu trúc:
– Gồm nhiều phần tử
– Hoạt động theo cơ chế “Vào sau – Ra trước”
(LIFO – Last In, First Out)
Đỉnh ngăn xếp
Trang 4Thao tác cơ bản trên Stack
Push Pop
Trang 5Thao tác thêm - Push vào Stack
Top
Trang 6Thao tác lấy - Pop khỏi stack
Top
Trang 7Ví dụ thêm và xóa phần tử trong stack
Cần nhập 4 số vào
Ban đầu Nhập 1
1
Nhập 5
1
5
Nhập 7
1
5
7
Nhập 3
1
5
7
3
Lấy ra => 3
1
5
7
3
Lấy ra => 7
1
5
7
Lấy ra => 5
1
5
Lấy ra => 1
1
Stack đã rỗng Ngừng
Trang 8Cách xây dựng Stack
Mảng 1 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ế do số lượng
phần tử cố định
Tốn chi phí tái cấp phát
và sao chép vùng nhớ
nếu sử dụng mảng
động
Phức tạp khi triển khai
chương trình
Không bị cố định về số
phần tử, phụ thuộc vào
bộ nhớ
Trang 9Stack – Sử dụng mảng
9
3
6
9 3 6
Stack
Top
Trang 10Stack 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
};
Trang 11Stack số nguyên – Sử dụng mảng
{
s.StkArray = new int[MaxItems];
if (s.StkArray == NULL)
return false;
s.StkMax = MaxItems;
s.StkTop = -1;
return true;
}
Trang 12Stack số nguyên – Sử dụng mảng
{
if (s.StkTop==-1)
return true;
return false;
}
Trang 13Stack số nguyên – Sử dụng mảng
{
return true;
return false;
}
Trang 14Stack số nguyên – Sử dụng mảng
{
if (IsFull(s))
return false;
s.StkTop++;
s.StkArray[s.StkTop] = newitem;
return true;
Trang 15Stack số nguyên – Sử dụng mảng
{
if (IsEmpty(s))
return false;
outitem = s.StkArray[s.StkTop];
s.StkTop ;
return true;
}
Trang 16Bà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)
Trang 17Stack – 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
• Đảo ngược một chuỗi ký tự
• Kinh tế Đối ngoại iạogn iốĐ ết hniK
Trang 18Stack – Sử dụng DSLK
9
7
4
N
7
9
4
Trang 19Stack – Sử dụng DSLK
• Cấu tạo đầu stack
• Cấu tạo một phần tử
N
StkCnt StkTop
Data Link
stack
StkCnt <integer>
StkTop <node pointer>
end stack
node
Data <datatype>
end node
Trang 20Stack số nguyên – Sử dụng DSLK
typedef struct tagSTACK_NODE
{
tagSTACK_NODE *pNext;
} STACK_NODE;
typedef struct STACK
{
STACK_NODE *StkTop;
};