Professional Documents
Culture Documents
CTDLGT - CPP - Chuong - 5 - Chong Va Hang
CTDLGT - CPP - Chuong - 5 - Chong Va Hang
Chồng và Hàng
(Buổi 8, 9)
Nội dung
Trường Đại học Bách Khoa Tp.HCM Cấu trúc dữ liệu và Giải thuật
NGUYỄN TRUNG TRỰC Chương 5. Chồng và Hàng
Khoa Khoa học và Kỹ thuật Máy tính
© 2015 2
Chồng và Hàng
Phần này trình bày danh sách hạn chế
(restricted list) mà tác vụ thêm vào và loại bỏ chỉ
được thực hiện ở đầu, ở cuối của danh sách.
Hai danh sách thuộc loại này là chồng (stack)
và hàng (queue).
f Chồng: tác vụ thêm vào và loại bỏ được thực
hiện ở đầu danh sách (LIFO – Last-In First-Out
list).
f Hàng: tác vụ thêm vào được thực hiện ở cuối
danh sách, tác vụ loại bỏ được thực hiện ở đầu
danh sách (FIFO – First-In First-Out list).
Trường Đại học Bách Khoa Tp.HCM Cấu trúc dữ liệu và Giải thuật
NGUYỄN TRUNG TRỰC Chương 5. Chồng và Hàng
Khoa Khoa học và Kỹ thuật Máy tính
© 2015 3
Chồng và Hàng
Chồng và hàng có thể được cài đặt bằng
mảng hoặc danh sách liên kết.
Danh sách hạn chế
Chồng Hàng
(stack) (queue)
Mảng Danh sách liên kết Mảng Danh sách liên kết
(array) (linked list) (array) (linked list)
Trường Đại học Bách Khoa Tp.HCM Cấu trúc dữ liệu và Giải thuật
NGUYỄN TRUNG TRỰC Chương 5. Chồng và Hàng
Khoa Khoa học và Kỹ thuật Máy tính
© 2015 4
Định nghĩa chồng
Chồng (stack) là một danh sách mà tác vụ
thêm vào (push) và tác vụ lấy ra (pop) chỉ
được thực hiện ở một đầu của danh sánh này
(được gọi là đỉnh của chồng).
f Dữ liệu thêm vào sau sẽ được lấy ra trước (LIFO
– Last-In First-Out).
f Dữ liệu thêm vào trước sẽ được lấy ra sau (FILO
– First-In Last-Out).
f Đỉnh (top) của chồng được chỉ ra bởi con trỏ sp
(stack pointer).
Trường Đại học Bách Khoa Tp.HCM Cấu trúc dữ liệu và Giải thuật
NGUYỄN TRUNG TRỰC Chương 5. Chồng và Hàng
Khoa Khoa học và Kỹ thuật Máy tính
© 2015 5
Định nghĩa chồng
sp Đỉnh
…
…
Trường Đại học Bách Khoa Tp.HCM Cấu trúc dữ liệu và Giải thuật
NGUYỄN TRUNG TRỰC Chương 5. Chồng và Hàng
Khoa Khoa học và Kỹ thuật Máy tính
© 2015 6
Định nghĩa chồng
3
3 4
1 2
sp 3 sp 4
sp 2 2 sp 2 2
sp 1 1 1 1 1
sp
t
Trường Đại học Bách Khoa Tp.HCM Cấu trúc dữ liệu và Giải thuật
NGUYỄN TRUNG TRỰC Chương 5. Chồng và Hàng
Khoa Khoa học và Kỹ thuật Máy tính
© 2015 7
Các tác vụ của chồng
Khởi tạo chồng rỗng (empty stack).
Thêm một phần tử vào chồng (push).
Lấy một phần tử ra khỏi chồng (pop).
Xem đỉnh của chồng (peek).
Xóa bỏ chồng (clear).
Trường Đại học Bách Khoa Tp.HCM Cấu trúc dữ liệu và Giải thuật
NGUYỄN TRUNG TRỰC Chương 5. Chồng và Hàng
Khoa Khoa học và Kỹ thuật Máy tính
© 2015 8
Cài đặt chồng là danh sách liên kết
Sp 4
1
null
Trường Đại học Bách Khoa Tp.HCM Cấu trúc dữ liệu và Giải thuật
NGUYỄN TRUNG TRỰC Chương 5. Chồng và Hàng
Khoa Khoa học và Kỹ thuật Máy tính
© 2015 9
Cấu trúc dữ liệu
Item
Mỗi phần tử có hai phần:
f Info: chứa thông tin của phần tử, có thể là: các
vùng tin (field), một cấu trúc (structure).
f Link: chứa tham chiếu đến phần tử kế tiếp trong
chồng.
Trường Đại học Bách Khoa Tp.HCM Cấu trúc dữ liệu và Giải thuật
NGUYỄN TRUNG TRỰC Chương 5. Chồng và Hàng
Khoa Khoa học và Kỹ thuật Máy tính
© 2015 10
Cấu trúc dữ liệu
#include <iostream>
using namespace std;
struct Item;
typedef Item* ref;
struct Item
{
int Info;
ref Link;
};
int main()
{
ref sp;
...
return 0;
}
Trường Đại học Bách Khoa Tp.HCM Cấu trúc dữ liệu và Giải thuật
NGUYỄN TRUNG TRỰC Chương 5. Chồng và Hàng
Khoa Khoa học và Kỹ thuật Máy tính
© 2015 11
Các tác vụ của chồng
void InitStack(ref& sp)
// Tạo stack rỗng
{
sp = NULL;
}
Trường Đại học Bách Khoa Tp.HCM Cấu trúc dữ liệu và Giải thuật
NGUYỄN TRUNG TRỰC Chương 5. Chồng và Hàng
Khoa Khoa học và Kỹ thuật Máy tính
© 2015 12
Các tác vụ của chồng
void Push(ref& sp, int x)
// Thêm x vào stack
{
ref p = new Item;
p->Info = x;
p->Link = sp;
sp = p;
}
Trường Đại học Bách Khoa Tp.HCM Cấu trúc dữ liệu và Giải thuật
NGUYỄN TRUNG TRỰC Chương 5. Chồng và Hàng
Khoa Khoa học và Kỹ thuật Máy tính
© 2015 15
Định nghĩa hàng
A Thêm vào A
A B Thêm vào B
A B C Thêm vào C
A B C Lấy ra A
B C Lấy ra B
Trường Đại học Bách Khoa Tp.HCM Cấu trúc dữ liệu và Giải thuật
NGUYỄN TRUNG TRỰC Chương 5. Chồng và Hàng
Khoa Khoa học và Kỹ thuật Máy tính
© 2015 16
Các tác vụ của hàng
Khởi tạo hàng rỗng (empty queue).
Thêm một phần tử vào hàng (enqueue): thêm
vào ở đầu Rear.
Lấy một phần tử ra khỏi hàng (dequeue): lấy
ra ở đầu Front.
Xem phần tử đầu tiên của hàng (peek).
Xóa bỏ hàng (clear).
Trường Đại học Bách Khoa Tp.HCM Cấu trúc dữ liệu và Giải thuật
NGUYỄN TRUNG TRỰC Chương 5. Chồng và Hàng
Khoa Khoa học và Kỹ thuật Máy tính
© 2015 17
Cài đặt hàng là danh sách liên kết
item
Front
item
item
Rear
null
Trường Đại học Bách Khoa Tp.HCM Cấu trúc dữ liệu và Giải thuật
NGUYỄN TRUNG TRỰC Chương 5. Chồng và Hàng
Khoa Khoa học và Kỹ thuật Máy tính
© 2015 19
Cấu trúc dữ liệu
#include <iostream>
using namespace std;
struct Item;
typedef Item* ref;
struct Item
{
int Info;
ref Link;
};
struct Queue
{
ref Front;
ref Rear;
};
Trường Đại học Bách Khoa Tp.HCM Cấu trúc dữ liệu và Giải thuật
NGUYỄN TRUNG TRỰC Chương 5. Chồng và Hàng
Khoa Khoa học và Kỹ thuật Máy tính
© 2015 20
Các tác vụ của hàng
int main()
{
Queue q;
...
return 0;
}
void InitQueue(Queue& q)
// Tạo hàng rỗng
{
q.Front = NULL;
q.Rear = NULL;
}
bool IsEmpty(Queue q)
// Kiểm tra hàng rỗng
{
bool kq = q.Front == NULL;
return kq;
}
Trường Đại học Bách Khoa Tp.HCM Cấu trúc dữ liệu và Giải thuật
NGUYỄN TRUNG TRỰC Chương 5. Chồng và Hàng
Khoa Khoa học và Kỹ thuật Máy tính
© 2015 21
Các tác vụ của hàng
void Enqueue(Queue& q, int x)
// Thêm x vào hàng
{
ref p = new Item;
p->Info = x;
p->Link = NULL;
if (q.Front == NULL)
q.Front = p;
else
q.Rear->Link = p;
q.Rear = p;
}
Trường Đại học Bách Khoa Tp.HCM Cấu trúc dữ liệu và Giải thuật
NGUYỄN TRUNG TRỰC Chương 5. Chồng và Hàng
Khoa Khoa học và Kỹ thuật Máy tính
© 2015 22
Các tác vụ của hàng
int Dequeue(Queue& q)
// Lấy phần tử ra khỏi hàng
{
int x;
ref p = q.Front;
x = p->Info;
if (q.Front == q.Rear)
q.Rear = NULL;
q.Front = p->Link;
delete p;
return x;
}
Trường Đại học Bách Khoa Tp.HCM Cấu trúc dữ liệu và Giải thuật
NGUYỄN TRUNG TRỰC Chương 5. Chồng và Hàng
Khoa Khoa học và Kỹ thuật Máy tính
© 2015 23
Các tác vụ của hàng
int Peek(Queue q)
// Xem đầu hàng
{
int x = q.Front->Info;
return x;
}
void Clear(Queue& q)
// Hủy bỏ toàn bộ hàng
{
ref p = q.Front;
while (p != NULL)
{
q.Front = p->Link;
delete p;
p = q.Front;
}
q.Rear = NULL;
}
Trường Đại học Bách Khoa Tp.HCM Cấu trúc dữ liệu và Giải thuật
NGUYỄN TRUNG TRỰC Chương 5. Chồng và Hàng
Khoa Khoa học và Kỹ thuật Máy tính
© 2015 24
Các tác vụ của hàng
void Display(Queue q)
// Duyệt hàng
{
ref p = q.Front;
while (p != NULL)
{
cout << p->Info << " ";
p = p->Link;
}
cout << endl;
}
Trường Đại học Bách Khoa Tp.HCM Cấu trúc dữ liệu và Giải thuật
NGUYỄN TRUNG TRỰC Chương 5. Chồng và Hàng
Khoa Khoa học và Kỹ thuật Máy tính
© 2015 25