[slide] chuong 4 - cac cau truc du lieu co ban
TRANSCRIPT
![Page 1: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/1.jpg)
LOGO
Các cấu trúc d ữ liệu
Cấu trúc dữ liệu & Giải thuật(Data Structures and Algorithms)
Nguyễn Tri TuấnKhoa CNTT – ĐH.KHTN.Tp.HCMEmail: [email protected]
![Page 2: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/2.jpg)
2Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Nội dung
Các cấu trúc dữ liệu cơ bản
Cây nhị phân – Binary Trees2
3
1
Các cấu trúc dữ liệu nâng cao
![Page 3: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/3.jpg)
3Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Các cấu trúc dữ liệu cơ bản
Các danh sách liên kết – Linked Lists
Ngăn xếp – Stack
1.1
Hàng đợi - Queue1.3
1.2
(Fundamental Data Structures)
![Page 4: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/4.jpg)
4Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Danh sách liên kết – Linked Lists
� Đặt vấn đề
� Danh sách liên kết là gì ?
� So sánh Mảng và Danh sách liên kết
� Danh sách liên kết đơn (Singly Linked List)
� Danh sách liên kết đôi (Doubly Linked List)
![Page 5: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/5.jpg)
5Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Đặt vấn đề (1)
� Nếu muốn thêm (Insert) 1 phần tử vào mảng, phải làm sao ?
10 5 13 11 6 12 9 ?
18
![Page 6: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/6.jpg)
6Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Đặt vấn đề (2)
� Phải di chuyển các phần tử về phía sau 1 vị trí ...
� …rồi chèn phần tử mới vào
� Vậy chi phí là O(n)
10 5 13 11 6 12 9
18
10 5 13 11 6 12 918
![Page 7: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/7.jpg)
7Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Đặt vấn đề (3)
� Tương tự, chi phí xóa 1 phần tử trong mảng cũng là O(n)
� Làm sao có thể thêm (hay xoá) 1 phần tử mà không phải di chuyển các phần tử khác ?
![Page 8: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/8.jpg)
8Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Đặt vấn đề (4)
� Ta tách rời các phần tử của mảng, và kết nối chúng lại với nhau bằng một “móc xích”
… …302010
![Page 9: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/9.jpg)
9Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Đặt vấn đề (5)
� Thao tác thêm phần tử chỉ cần thay đổi các mối liên kết tại chỗ
� Chi phí O(1)
18
… …302010
![Page 10: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/10.jpg)
Danh sách liên kết là gì ? (1)
� Hãy viết ra các đặc điểm của DSLK� Ít nhất 5 đặc điểm
10Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
![Page 11: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/11.jpg)
Danh sách liên kết là gì ? (2)
� Đặc điểm của DSLK� Sử dụng con trỏ (pointer)� Cấp phát bộ nhớ động� Dãy tuần tự các node� Giữa hai node có 1 hay nhiều con trỏ liên kết� Các node không cần phải lưu trữ liên tiếp nhau trong
bộ nhớ� Có thể mở rộng tuỳ ý (chỉ giới hạn bởi dung lượng bộ
nhớ)� Thao tác Thêm/Xóa không cần phải dịch chuyển
phần tử
11Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
![Page 12: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/12.jpg)
12Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
So sánh Mảng và Danh sách liên kết
Mảng Danh sách liên kết
Kích thước cố định Số phần tử thay đổi tùy ý
Các phần tử lưu trữ tuần tự (địa chỉ tăng dần) trong bộ nhớ
Các phần tử lưu trữ rời rạc, liên kết với nhau bằng con trỏ
Phải tịnh tiến các phần tử khimuốn Thêm/Xóa 1 phần tử -chi phí O(n)
Chỉ cần thay đổi con trỏ liênkết khi muốn Thêm/Xóa 1 phần tử - chi phí O(1)
Truy xuất ngẫu nhiên (nhanh) Truy xuất tuần tự (chậm)
Sử dụng ít bộ nhớ hơn Sử dụng nhiều bộ nhớ hơn
![Page 13: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/13.jpg)
13Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Danh sách liên kết đơn (1)
� Đặc điểm:� Mỗi node chỉ có 1 con trỏ liên kết (đến node kế tiếp
trong danh sách)
![Page 14: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/14.jpg)
14Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Danh sách liên kết đơn (2)
� Các thao tác cơ bản� Khởi tạo danh sách� Xóa danh sách� Kiểm tra danh sách rỗng� Đếm số phần tử trong danh sách� Thêm node� Xóa node� Tìm một node� Lấy thông tin một node
![Page 15: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/15.jpg)
Danh sách liên kết đơn (3)
Minh họa thao tác xóa node
15Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Minh họa thao tác thêm node
![Page 16: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/16.jpg)
16Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Danh sách liên kết đơn (4)
template <class T> class LINKED_LIST {
private:
struct ListNode {T item; // data of nodeListNode *next; // pointer to next node
};int size; // number of node in listListNode *head; // pointer to 1 st node in list
public:LINKED_LIST(); // default constructorLINKED_LIST(const LINKED_LIST &aList); // copy constructor~LINKED_LIST(); // destructor
// operationsbool isEmpty();int getLength();void insert(int index, T newItem);void remove(int index);int findNode(T key); // return node indexvoid retrieve(int index, T &dataItem);
}; // end class
![Page 17: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/17.jpg)
Danh sách liên kết đôi (1)
� Đặc điểm:� Mỗi node có 2 con trỏ liên kết đến node kế tiếp (next)
và node phía trước (prev) trong danh sách
17Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
![Page 18: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/18.jpg)
18Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Danh sách liên kết đôi (2)
� Các thao tác cơ bản� Khởi tạo danh sách� Xóa danh sách� Kiểm tra danh sách rỗng� Đếm số phần tử trong danh sách� Thêm node� Xóa node� Tìm một node� Lấy thông tin một node
![Page 19: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/19.jpg)
Danh sách liên kết đôi (3)
19Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Minh họa thao tác thêm node
![Page 20: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/20.jpg)
Danh sách liên kết đôi (4)
20Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Minh họa thao tác xóa node
![Page 21: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/21.jpg)
21Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Danh sách liên kết đôi (5)
template <class T> class DLINKED_LIST {
private:
struct ListNode {T item; // data of nodeListNode *prev, *next;
};int size; // number of node in listListNode *head; // pointer to 1 st node in list
public:DLINKED_LIST(); // default constructorDLINKED_LIST(const LINKED_LIST &aList); // copy constructor~DLINKED_LIST(); // destructor
// operationsbool isEmpty();int getLength();void insert(int index, T newItem);void remove(int index);int findNode(T key); // return node indexvoid retrieve(int index, T &dataItem);
}; // end class
![Page 22: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/22.jpg)
22Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Các cấu trúc dữ liệu cơ bản
Các danh sách liên kết – Linked Lists
Ngăn xếp – Stack
1.1
Hàng đợi - Queue1.3
1.2
(Fundamental Data Structures)
![Page 23: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/23.jpg)
23Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Ngăn xếp - Stack
� Định nghĩa
� Các thao tác cơ bản
� Cài đặt Stack bằng mảng
� Cài đặt Stack bằng DSLK đơn
� Ứng dụng Stack
![Page 24: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/24.jpg)
24Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Định nghĩa
� Stack là một cấu trúc dữ liệu:� Dùng để lưu trữ nhiều phần tử dữ liệu
� Hoạt động theo cơ chế “Vào sau – Ra trước”(Last In/First Out – LIFO)
** Cấu trúc Stack được phát minh năm 1955, được đăng ký bản quyền năm 1957, bởi tác giả Friedrich L. Bauer (người Đức)
![Page 25: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/25.jpg)
25Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Các thao tác cơ bản (1)
� Khởi tạo Stack rỗng� Xóa Stack� Kiểm tra Stack rỗng� Thêm một phần tử vào đỉnh Stack (Push)� Xóa một phần tử ở đỉnh Stack (Pop)� Lấy phần tử ở đỉnh Stack mà không loại bỏ nó
![Page 26: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/26.jpg)
26Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Các thao tác cơ bản (2)
� Push: thêm 1 phần tử vào đỉnh Stack
� Pop: lấy ra 1 phần tử ở đỉnh Stack
![Page 27: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/27.jpg)
27Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Cài đặt Stack bằng mảng
template <class T> class STACK {
private:
T *items; // array of stack items
int top; // index to top of stack
int maxSize; // maximum size of stack
public:STACK(int size); // create stack with
// ‘size’ items~STACK(); // destructor
// operationsbool isEmpty();void push(T newItem);T pop();T topValue();
}; // end class
![Page 28: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/28.jpg)
Áp dụng
� Viết lệnh để thực hiện các yêu cầu sauđây:� Khai báo biến stack S, và khởi tạo S có N phần tử� Đưa các giá trị sau vào S: 15, 8, 6, 21� Lấy 21 ra khỏi S� Lấy 8 ra khỏi S� Gán các giá trị 1->99 vào S� Lần lượt lấy các phần tử trong S ra và in lên màn hình� Cho mảng a chứa dãy số nguyên từ 1->N, hãy đảo
ngược các phần tử của mảng a
28Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
![Page 29: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/29.jpg)
Cài đặt Stack bằng DSLK đơn (1)
29/203Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Hình minh họa cấu trúc Stack sử dụng DSLK đơn
![Page 30: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/30.jpg)
30/203Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Cài đặt Stack bằng DSLK đơn (2)
Push(): chính là thêm node vào đầu DSLK
![Page 31: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/31.jpg)
31Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Cài đặt Stack bằng DSLK đơn (3)
template <class T> class STACK {
private:
struct StackNode {T item; // data of item on the stackStackNode *next; // pointer to next node
};StackNode *top; // pointer to top of stack
public:STACK(); // default constructorSTACK(const STACK &aStack); // copy constructor~STACK(); // destructor
// operationsbool isEmpty();void push(T newItem);T pop();T topValue();
}; // end class
![Page 32: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/32.jpg)
So sánh 2 cách cài đặt Stack
� So sánh� Cài đặt Stack bằng mảng (array-based stack)� Cài đặt Stack bằng Danh sách liên kết đơn (pointer-
based stack)
32Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
![Page 33: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/33.jpg)
33Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Ứng dụng của Stack
� Tính giá trị biểu thức toán học (thuật toánBalan ngược – Reverse Polish notation)
� Bài toán tìm đường đi trong mê cung, bàitoán mã đi tuần, bài toán 8 quân hậu,…
� Khử đệ qui
� …
![Page 34: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/34.jpg)
34Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Thuật toán Balan ngược
� Cho 1 biểu thức ở dạng chuỗi:� S = “5 + ((1 + 2) * 4) − 3”� Biểu thức gồm các toán tử +,-,*,/ và dấu ngoặc ()
� Tính giá trị biểu thức trên
![Page 35: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/35.jpg)
35Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Các cấu trúc dữ liệu cơ bản
Các danh sách liên kết – Linked Lists
Ngăn xếp – Stack
1.1
Hàng đợi - Queue1.3
1.2
(Fundamental Data Structures)
![Page 36: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/36.jpg)
36Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Hàng đợi - Queue
� Định nghĩa
� Các thao tác cơ bản
� Cài đặt Queue bằng mảng
� Cài đặt Queue bằng DSLK đơn
� Ứng dụng Queue
![Page 37: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/37.jpg)
37Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Định nghĩa
� Queue là một cấu trúc dữ liệu:� Dùng để lưu trữ nhiều phần tử dữ liệu
� Hoạt động theo cơ chế “Vào trước – Ra trước”(First In/First Out – FIFO)
![Page 38: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/38.jpg)
38Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Các thao tác cơ bản (1)
� Khởi tạo Queue rỗng� Xóa Queue� Kiểm tra Queue rỗng ?� Thêm 1 phần tử vào cuối Queue (EnQueue)� Lấy ra 1 phần tử ở đầu Queue (DeQueue)� Lấy phần tử ở đầu Queue mà không loại bỏ
nó
![Page 39: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/39.jpg)
39/203Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Các thao tác cơ bản (2)
� EnQueue: thêm 1 phần tử vào cuối Queue� DeQueue: lấy ra 1 phần tử ở đầu Queue
![Page 40: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/40.jpg)
40/203Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Các thao tác cơ bản (3)
Minh họa thao tác EnQueue
![Page 41: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/41.jpg)
41Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Các thao tác cơ bản (4)
Minh họa thao tác DeQueue
![Page 42: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/42.jpg)
42Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Cài đặt Queue dùng mảng (1)
Cấu tạo của Queue
![Page 43: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/43.jpg)
43Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Cài đặt Queue dùng mảng (2)
Minh họa hình ảnh các phần tử đang chứa trong Queue
![Page 44: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/44.jpg)
44Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Cài đặt Queue dùng mảng (3)
Khi thêm nhiều phần tử, sẽ làm “tràn” mảng � “Tràn giả”
![Page 45: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/45.jpg)
45Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Cài đặt Queue dùng mảng (4)
Giải pháp cho tình huống “tràn giả”: xử lý mảng như là 1 danh sách vòng
![Page 46: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/46.jpg)
46Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Cài đặt Queue dùng mảng (5)
template <class T> class QUEUE {private:
T *items;// array of queue itemsint front;int rear;int count;int maxSize; // maximum size of queue
public:QUEUE(int size); // create queue with
// ‘size’ items~QUEUE(); // destructor
// operationsbool isEmpty();void enqueue(T newItem);T dequeue();T frontValue();
}; // end class
![Page 47: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/47.jpg)
47Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Cài đặt Queue dùng DSLK đơn (1)
- Enqueue: thêm node vào cuối DSLK đơn- Dequeue: xóa node ở đầu DSLK đơn
![Page 48: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/48.jpg)
Cài đặt Queue dùng DSLK đơn (2)
48Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
template <class T> class QUEUE {
private:
struct QueueNode {T item; // data of item on the queueQueueNode *next; // pointer to next node
};QueueNode *front;QueueNode *rear;
public:QUEUE(); // default constructorQUEUE(const QUEUE &aStack); // copy constructor~QUEUE(); // destructor
// operationsbool isEmpty();void enqueue(T newItem);T dequeue();T frontValue();
}; // end class
![Page 49: [Slide] Chuong 4 - Cac Cau Truc Du Lieu Co Ban](https://reader034.vdocuments.pub/reader034/viewer/2022051616/55403600550346777c8b49e6/html5/thumbnails/49.jpg)
49Winter 2012 (C) Nguyen Tri Tuan - DH.KHTN Tp.HCM
Ứng dụng của Queue
� Quản lý xếp hàng (theo số thứ tự). VD. Tại các ngân hàng, bệnh viện,…
� Quản lý phục vụ in ấn (máy in)