Download as pdf or txt
Download as pdf or txt
You are on page 1of 25

Chương 5

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)

Các loại danh sách hạn chế

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

Thêm vào Lấy ra

sp Đỉnh


Chồng và tác vụ thêm vào, lấy ra

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

Ví dụ về tác vụ thêm vào và lấy ra của 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 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

Chồng là một danh sách liên kế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 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;
}

bool IsEmpty(ref sp)


// Kiểm tra stack rỗng
{
bool kq = sp == 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 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;
}

int Pop(ref& sp)


// Lấy phần tử ra khỏi stack
{
int x;
ref p = sp;
x = p->Info;
sp = 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 13
Các tác vụ của chồng
int Peek(ref sp)
// Xem đỉnh stack
{
int x = sp->Info;
return x;
}

void Clear(ref& sp)


// Hủy bỏ toàn bộ stack
{
ref p = sp;
while (p != NULL)
{
sp = p->Link;
delete p;
p = sp;
}
}
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 14
Định nghĩa hàng
™ Hàng (queue) là một danh sách mà tác vụ thêm
vào ở đầu này và tác vụ lấy ra ở đầu kia của
danh sách này.
f Dữ liệu thêm vào trước sẽ được lấy ra trước (FIFO
– Fisrt-In First-Out)
f Dữ liệu thêm vào sau sẽ được lấy ra sau (LILO –
Last-In Last-Out).

Lấy ra Thêm vào

Hàng và tác vụ thêm vào, lấy ra

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

Ví dụ về tác vụ thêm vào và lấy ra của hà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 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

Cấu trúc hàng là một danh sách liên kế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 18
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
hàng.
™ Queue
f Front: tham chiếu đến đầu lấy ra của hàng.
f Rear: tham chiếu đến đầu thêm vào của hà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 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

You might also like