SlideShare a Scribd company logo
Chương 3.2:
NGĂN XẾP – HÀNG ĐỢI
(Stack - Queue)
Chương 3: Ngăn xếp – Hàng đợi
Nội dung
 Ngăn xếp (Stack)
 Hàng đợi (Queue)
2
Chương 3: Ngăn xếp – Hàng đợi
Nội dung
3
 Ngăn xếp (Stack)
 Khái niệm Stack
 Các thao tác trên Stack
 Hiện thực Stack
 Ứng dụng của Stack
Chương 3: Ngăn xếp – Hàng đợi
Stack - Khái niệm
 Stack là một danh sách mà các đối tượng được thêm vào và
lấy ra chỉ ở một đầu của danh sách
 Vì thế, thao tác trên Stack được thực hiện theo cơ chế LIFO
(Last In First Out - Vào sau ra trước)
4
Chương 3: Ngăn xếp – Hàng đợi
Stack – Các thao tác
 Stack hỗ trợ 2 thao tác chính:
 Push: Thêm 1 đối tượng vào Stack
 Pop: Lấy 1 đối tượng ra khỏi Stack
 Ví dụ:
5 2 3 - - 4
 Stack cũng hỗ trợ một số thao tác khác:
 isEmpty(): Kiểm tra xem Stack có rỗng không
 Top(): Trả về giá trị của phần tử nằm ở đầu
Stack mà không hủy nó khỏi Stack. Nếu Stack
rỗng thì lỗi sẽ xảy ra
5
Chương 3: Ngăn xếp – Hàng đợi
Hiện thực Stack dùng DSLK
6
 Khai báo các cấu trúc:
struct Node
{
DataType data;
Node *next;
};
struct Stack
{
Node *top;
};
Chương 3: Ngăn xếp – Hàng đợi
Hiện thực Stack dùng DSLK (tt.)
 Khởi tạo Stack:
7
void Khoitao(Stack &s)
{
s.top = NULL;
}
Chương 3: Ngăn xếp – Hàng đợi
Hiện thực Stack dùng DSLK (tt.)
 Kiểm tra xem Stack có rỗng không:
8
int isEmpty ( Stack s )
{
return s.top == NULL ? 1 : 0;
}
Chương 3: Ngăn xếp – Hàng đợi
Hiện thực Stack dùng DSLK (tt.)
 Thêm một phần tử vào Stack:
9
void Push ( Stack &s, DataType x )
{
Node *p = new Node;
if ( p==NULL ) { cout<<“Khong du bo nho”; return; }
p->data = x;
p->next = NULL;
if (s.top==NULL) // if (isEmpty(s))
s.top = p;
else{
p->next = s.top;
s.top = p;
}
}
Thêm phần tử vào đầu danh sách
Chương 3: Ngăn xếp – Hàng đợi
Hiện thực Stack dùng DSLK (tt.)
 Lấy một phần tử ra khỏi Stack:
10
DataType Pop ( Stack &s )
{
if ( s.top==NULL ){
cout<<"Stack rỗng"; return 0;
}
DataType x;
Node *p = s.top;
s.top = s.top->next;
x = p->data;
delete p;
return x;
}
Lấy và xóa phần tử ở đầu danh sách
Chương 3: Ngăn xếp – Hàng đợi
Hiện thực Stack dùng DSLK (tt.)
 Xem phần tử ở đỉnh Stack:
11
DataType Top ( Stack s )
{
if ( s.top==NULL ){
cout<<"Stack rỗng"; return 0;
}
DataType x;
x = s.top->data;
return x;
}
Chương 3: Ngăn xếp – Hàng đợi
12
Stack - Ứng dụng
57 2
1 28 2
0 14 2
0 7 2
1 3 2
1 1 2
1 0
57 = 1110012
Ví dụ: 57 = ???2
Bài tập: đổi số từ cơ số 10 sang cơ số x
Chương 3: Ngăn xếp – Hàng đợi
Nội dung
 Ngăn xếp (Stack)
 Hàng đợi (Queue)
 Khái niệm Queue
 Các thao tác trên Queue
 Hiện thực Queue
 Ứng dụng Queue
13
Chương 3: Ngăn xếp – Hàng đợi
Queue - Khái niệm
 Queue là một danh sách mà các đối tượng được thêm vào ở
một đầu của danh sách và lấy ra ở một đầu kia của danh sách
 Việc thêm một đối tượng luôn diễn ra ở cuối Queue và việc
lấy ra một đối tượng luôn diễn ra ở đầu Queue
 Vì thế, thao tác trên Queue được thực hiện theo cơ chế FIFO
(First In First Out - Vào trước ra trước)
14
Chương 3: Ngăn xếp – Hàng đợi
Queue - Khái niệm
15
Imaging
Chương 3: Ngăn xếp – Hàng đợi
Queue – Các thao tác
 Queue hỗ trợ 2 thao tác chính:
 EnQueue(): Thêm đối tượng vào cuối (rear) Queue
 DeQueue(): Lấy đối tượng ở đầu (front) Queue
 Ví dụ:
5 3 2 - - 4
 Queue còn hỗ trợ các thao tác:
 isEmpty(): Kiểm tra xem Queue có rỗng không
 Front(): Trả về giá trị phần tử nằm ở đầu Queue mà không hủy
nó. Nếu Queue rỗng thì lỗi sẽ xảy ra
16
Front Rear
Chương 3: Ngăn xếp – Hàng đợi
Hiện thực Queue dùng DSLK
17
 Có thể biểu diễn Queue bằng cách sử dụng DSLK đơn
 Có 2 lựa chọn (cách nào tốt nhất?):
 head sẽ là front, tail sẽ là rear
 head sẽ là rear, tail sẽ là front
b c m n
front
rear
a
b c m n
rear
front
a
Chương 3: Ngăn xếp – Hàng đợi
Hiện thực Queue dùng DSLK
18
 Khai báo các cấu trúc:
struct Node
{
DataType data;
Node *next;
};
struct Queue
{
Node *front, *rear;
};
Chương 3: Ngăn xếp – Hàng đợi
Hiện thực Queue dùng DSLK
 Khởi tạo Queue rỗng:
 Kiểm tra hàng đợi rỗng :
19
void Khoitao(Queue &q)
{
q.front = q.rear = NULL;
}
int isEmpty(Queue &q)
{
if ( q.front==NULL )
return 1;
else
return 0;
}
Chương 3: Ngăn xếp – Hàng đợi
Hiện thực Queue dùng DSLK
 Thêm một phần tử p vào cuối Queue:
20
void EnQueue(Queue &q, DataType x)
{
Node *p = new Node;
if (p==NULL) exit(1); //Khong du bo nho
p->next = NULL;
p->data = x;
if (q.front==NULL) // TH Queue rỗng
q.front = q.rear = p;
else
{
q.rear->next = p;
q.rear = p;
}
}
Chương 3: Ngăn xếp – Hàng đợi
Hiện thực Queue dùng DSLK
 Lấy phần tử ra khỏi Queue:
21
DataType DeQueue(Queue &q)
{
if (isEmpty(q)) {
cout<<“Queue rong”;return 0;
}
Node *p = q.front;
DataType x = p->data;
q.front = q.front->pNext;
if ( q.front==NULL ) q.rear = NULL;
delete p;
return x;
}
Chương 3: Ngăn xếp – Hàng đợi
Hiện thực Queue dùng DSLK
 Xem thông tin của phần tử ở đầu Queue:
DataType Front(Queue q)
{
if (isEmpty(q))
{
cout<<“Queue rong”;
return 0;
}
return q.front->data;
}

More Related Content

What's hot

BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGBÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Trường Phạm
 
Mô hình hóa dữ liệu mức quan niệm
Mô hình hóa dữ liệu mức quan niệm Mô hình hóa dữ liệu mức quan niệm
Mô hình hóa dữ liệu mức quan niệm
nataliej4
 
Đại số boolean và mạch logic
Đại số boolean và mạch logicĐại số boolean và mạch logic
Đại số boolean và mạch logic
www. mientayvn.com
 
Bài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPT
Bài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPTBài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPT
Bài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPT
MasterCode.vn
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Nguyễn Công Hoàng
 
Giáo trình mạng máy tính PTIT
Giáo trình mạng máy tính PTITGiáo trình mạng máy tính PTIT
Giáo trình mạng máy tính PTIT
NguynMinh294
 
Chuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệChuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệ
Hưởng Nguyễn
 
Hd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanhHd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanhHai Rom
 
Slide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư viện
Slide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư việnSlide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư viện
Slide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư viện
The Nguyen Manh
 
Chuong 1. Lập trình hướng đối tượng trong java
Chuong 1. Lập trình hướng đối tượng trong javaChuong 1. Lập trình hướng đối tượng trong java
Chuong 1. Lập trình hướng đối tượng trong java
thienlucpm2
 
Bài 2 Cài đặt Windows Server 2008 - Giáo trình FPT
Bài 2 Cài đặt Windows Server 2008 - Giáo trình FPTBài 2 Cài đặt Windows Server 2008 - Giáo trình FPT
Bài 2 Cài đặt Windows Server 2008 - Giáo trình FPT
MasterCode.vn
 
Slide mang may tinh
Slide mang may tinhSlide mang may tinh
Slide mang may tinh
Chuong Nguyen
 
Phương pháp nhánh cận
Phương pháp nhánh cậnPhương pháp nhánh cận
Phương pháp nhánh cận
Diên Vĩ
 
Bai tap va loi giai sql
Bai tap va loi giai sqlBai tap va loi giai sql
Bai tap va loi giai sql. .
 
Bài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệuBài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệutrieulongweb
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
pisu412
 
Đề tài: Tìm hiểu và sử dụng Facebook API, HAY, 9đ
Đề tài: Tìm hiểu và sử dụng Facebook API, HAY, 9đĐề tài: Tìm hiểu và sử dụng Facebook API, HAY, 9đ
Đề tài: Tìm hiểu và sử dụng Facebook API, HAY, 9đ
Dịch Vụ Viết Bài Trọn Gói ZALO 0917193864
 
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
iwanttoit
 
Bài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giảiBài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giải
Trung Thanh Nguyen
 
Chuong 3- CSDL phân tán
Chuong 3- CSDL phân tánChuong 3- CSDL phân tán
Chuong 3- CSDL phân tánduysu
 

What's hot (20)

BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGBÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
BÀI GIẢNG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
 
Mô hình hóa dữ liệu mức quan niệm
Mô hình hóa dữ liệu mức quan niệm Mô hình hóa dữ liệu mức quan niệm
Mô hình hóa dữ liệu mức quan niệm
 
Đại số boolean và mạch logic
Đại số boolean và mạch logicĐại số boolean và mạch logic
Đại số boolean và mạch logic
 
Bài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPT
Bài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPTBài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPT
Bài 7: Danh sách liên kết (LINKED LIST) và tập hợp (SET) - Giáo trình FPT
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
 
Giáo trình mạng máy tính PTIT
Giáo trình mạng máy tính PTITGiáo trình mạng máy tính PTIT
Giáo trình mạng máy tính PTIT
 
Chuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệChuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệ
 
Hd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanhHd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanh
 
Slide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư viện
Slide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư việnSlide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư viện
Slide bài tập lớn ngôn ngữ lập trình - phần mềm quản lý thư viện
 
Chuong 1. Lập trình hướng đối tượng trong java
Chuong 1. Lập trình hướng đối tượng trong javaChuong 1. Lập trình hướng đối tượng trong java
Chuong 1. Lập trình hướng đối tượng trong java
 
Bài 2 Cài đặt Windows Server 2008 - Giáo trình FPT
Bài 2 Cài đặt Windows Server 2008 - Giáo trình FPTBài 2 Cài đặt Windows Server 2008 - Giáo trình FPT
Bài 2 Cài đặt Windows Server 2008 - Giáo trình FPT
 
Slide mang may tinh
Slide mang may tinhSlide mang may tinh
Slide mang may tinh
 
Phương pháp nhánh cận
Phương pháp nhánh cậnPhương pháp nhánh cận
Phương pháp nhánh cận
 
Bai tap va loi giai sql
Bai tap va loi giai sqlBai tap va loi giai sql
Bai tap va loi giai sql
 
Bài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệuBài giảng cơ sở dữ liệu
Bài giảng cơ sở dữ liệu
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
 
Đề tài: Tìm hiểu và sử dụng Facebook API, HAY, 9đ
Đề tài: Tìm hiểu và sử dụng Facebook API, HAY, 9đĐề tài: Tìm hiểu và sử dụng Facebook API, HAY, 9đ
Đề tài: Tìm hiểu và sử dụng Facebook API, HAY, 9đ
 
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
Bai13-Cau truc du lieu va giai thuat - Cay (Tree)
 
Bài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giảiBài tập mẫu C và C++ có giải
Bài tập mẫu C và C++ có giải
 
Chuong 3- CSDL phân tán
Chuong 3- CSDL phân tánChuong 3- CSDL phân tán
Chuong 3- CSDL phân tán
 

Similar to C3 stack queue

C6 stack queue
C6 stack queueC6 stack queue
C6 stack queue
Thái Phan Minh
 
Cau truc dl_va_giai_thuat_bai1[1] - copy
Cau truc dl_va_giai_thuat_bai1[1] - copyCau truc dl_va_giai_thuat_bai1[1] - copy
Cau truc dl_va_giai_thuat_bai1[1] - copy
Nguyen Van Hung
 
02 stack queue
02 stack queue02 stack queue
02 stack queuelanheo04
 
Bai10 stack queue
Bai10 stack queueBai10 stack queue
Bai10 stack queueHồ Lợi
 
Ctdl C03
Ctdl C03Ctdl C03
Ctdl C03giang
 
Stack &amp; queue
Stack &amp; queueStack &amp; queue
Stack &amp; queue
Kỳ Tôn Thất
 
CTDL-04-Ngan xep va Hang doi (1).pdf
CTDL-04-Ngan xep va Hang doi (1).pdfCTDL-04-Ngan xep va Hang doi (1).pdf
CTDL-04-Ngan xep va Hang doi (1).pdf
LmTrn286060
 
Ctdl C02
Ctdl C02Ctdl C02
Ctdl C02giang
 
Bài tập CTDL và GT 12
Bài tập CTDL và GT 12Bài tập CTDL và GT 12
Bài tập CTDL và GT 12
Hồ Lợi
 
Bai5 dsachlket
Bai5 dsachlketBai5 dsachlket
Bai5 dsachlketHồ Lợi
 
Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Bài tập CTDL và GT 1
Bài tập CTDL và GT 1
Hồ Lợi
 
BáO CáO Lý ThuyếT Java
BáO CáO Lý ThuyếT JavaBáO CáO Lý ThuyếT Java
BáO CáO Lý ThuyếT Java
Trung Nguyen Quang
 
C3 danh sachlienket
C3 danh sachlienketC3 danh sachlienket
C3 danh sachlienkethiep0109
 
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdftrac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
NguynVnTun74
 
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT.pptx
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT.pptxCẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT.pptx
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT.pptx
VuDuong69
 
Cấu trúc dữ liệu kiểu danh sách liên kết
Cấu trúc dữ liệu kiểu danh sách liên kếtCấu trúc dữ liệu kiểu danh sách liên kết
Cấu trúc dữ liệu kiểu danh sách liên kết
hotro
 
Bài 4: ARRAY VÀ ARRAYLIST - Giáo trình FPT
Bài 4: ARRAY VÀ ARRAYLIST - Giáo trình FPTBài 4: ARRAY VÀ ARRAYLIST - Giáo trình FPT
Bài 4: ARRAY VÀ ARRAYLIST - Giáo trình FPT
MasterCode.vn
 
Ctdl C04
Ctdl C04Ctdl C04
Ctdl C04giang
 

Similar to C3 stack queue (20)

C6 stack queue
C6 stack queueC6 stack queue
C6 stack queue
 
Cau truc dl_va_giai_thuat_bai1[1] - copy
Cau truc dl_va_giai_thuat_bai1[1] - copyCau truc dl_va_giai_thuat_bai1[1] - copy
Cau truc dl_va_giai_thuat_bai1[1] - copy
 
02 stack queue
02 stack queue02 stack queue
02 stack queue
 
Bai10 stack queue
Bai10 stack queueBai10 stack queue
Bai10 stack queue
 
Ctdl C03
Ctdl C03Ctdl C03
Ctdl C03
 
Stack &amp; queue
Stack &amp; queueStack &amp; queue
Stack &amp; queue
 
CTDL-04-Ngan xep va Hang doi (1).pdf
CTDL-04-Ngan xep va Hang doi (1).pdfCTDL-04-Ngan xep va Hang doi (1).pdf
CTDL-04-Ngan xep va Hang doi (1).pdf
 
Ctdl ktlt tuan5
Ctdl ktlt tuan5Ctdl ktlt tuan5
Ctdl ktlt tuan5
 
Ctdl C02
Ctdl C02Ctdl C02
Ctdl C02
 
Bài tập CTDL và GT 12
Bài tập CTDL và GT 12Bài tập CTDL và GT 12
Bài tập CTDL và GT 12
 
Bai5 dsachlket
Bai5 dsachlketBai5 dsachlket
Bai5 dsachlket
 
Bài tập CTDL và GT 1
Bài tập CTDL và GT 1Bài tập CTDL và GT 1
Bài tập CTDL và GT 1
 
BáO CáO Lý ThuyếT Java
BáO CáO Lý ThuyếT JavaBáO CáO Lý ThuyếT Java
BáO CáO Lý ThuyếT Java
 
C3 danh sachlienket
C3 danh sachlienketC3 danh sachlienket
C3 danh sachlienket
 
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdftrac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
trac-nghiem-cau-truc-du-lieu-va-giai-thuat.pdf
 
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT.pptx
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT.pptxCẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT.pptx
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT.pptx
 
Cấu trúc dữ liệu kiểu danh sách liên kết
Cấu trúc dữ liệu kiểu danh sách liên kếtCấu trúc dữ liệu kiểu danh sách liên kết
Cấu trúc dữ liệu kiểu danh sách liên kết
 
Bài 4: ARRAY VÀ ARRAYLIST - Giáo trình FPT
Bài 4: ARRAY VÀ ARRAYLIST - Giáo trình FPTBài 4: ARRAY VÀ ARRAYLIST - Giáo trình FPT
Bài 4: ARRAY VÀ ARRAYLIST - Giáo trình FPT
 
Ctdl c2
Ctdl c2Ctdl c2
Ctdl c2
 
Ctdl C04
Ctdl C04Ctdl C04
Ctdl C04
 

C3 stack queue

  • 1. Chương 3.2: NGĂN XẾP – HÀNG ĐỢI (Stack - Queue)
  • 2. Chương 3: Ngăn xếp – Hàng đợi Nội dung  Ngăn xếp (Stack)  Hàng đợi (Queue) 2
  • 3. Chương 3: Ngăn xếp – Hàng đợi Nội dung 3  Ngăn xếp (Stack)  Khái niệm Stack  Các thao tác trên Stack  Hiện thực Stack  Ứng dụng của Stack
  • 4. Chương 3: Ngăn xếp – Hàng đợi Stack - Khái niệm  Stack là một danh sách mà các đối tượng được thêm vào và lấy ra chỉ ở một đầu của danh sách  Vì thế, thao tác trên Stack được thực hiện theo cơ chế LIFO (Last In First Out - Vào sau ra trước) 4
  • 5. Chương 3: Ngăn xếp – Hàng đợi Stack – Các thao tác  Stack hỗ trợ 2 thao tác chính:  Push: Thêm 1 đối tượng vào Stack  Pop: Lấy 1 đối tượng ra khỏi Stack  Ví dụ: 5 2 3 - - 4  Stack cũng hỗ trợ một số thao tác khác:  isEmpty(): Kiểm tra xem Stack có rỗng không  Top(): Trả về giá trị của phần tử nằm ở đầu Stack mà không hủy nó khỏi Stack. Nếu Stack rỗng thì lỗi sẽ xảy ra 5
  • 6. Chương 3: Ngăn xếp – Hàng đợi Hiện thực Stack dùng DSLK 6  Khai báo các cấu trúc: struct Node { DataType data; Node *next; }; struct Stack { Node *top; };
  • 7. Chương 3: Ngăn xếp – Hàng đợi Hiện thực Stack dùng DSLK (tt.)  Khởi tạo Stack: 7 void Khoitao(Stack &s) { s.top = NULL; }
  • 8. Chương 3: Ngăn xếp – Hàng đợi Hiện thực Stack dùng DSLK (tt.)  Kiểm tra xem Stack có rỗng không: 8 int isEmpty ( Stack s ) { return s.top == NULL ? 1 : 0; }
  • 9. Chương 3: Ngăn xếp – Hàng đợi Hiện thực Stack dùng DSLK (tt.)  Thêm một phần tử vào Stack: 9 void Push ( Stack &s, DataType x ) { Node *p = new Node; if ( p==NULL ) { cout<<“Khong du bo nho”; return; } p->data = x; p->next = NULL; if (s.top==NULL) // if (isEmpty(s)) s.top = p; else{ p->next = s.top; s.top = p; } } Thêm phần tử vào đầu danh sách
  • 10. Chương 3: Ngăn xếp – Hàng đợi Hiện thực Stack dùng DSLK (tt.)  Lấy một phần tử ra khỏi Stack: 10 DataType Pop ( Stack &s ) { if ( s.top==NULL ){ cout<<"Stack rỗng"; return 0; } DataType x; Node *p = s.top; s.top = s.top->next; x = p->data; delete p; return x; } Lấy và xóa phần tử ở đầu danh sách
  • 11. Chương 3: Ngăn xếp – Hàng đợi Hiện thực Stack dùng DSLK (tt.)  Xem phần tử ở đỉnh Stack: 11 DataType Top ( Stack s ) { if ( s.top==NULL ){ cout<<"Stack rỗng"; return 0; } DataType x; x = s.top->data; return x; }
  • 12. Chương 3: Ngăn xếp – Hàng đợi 12 Stack - Ứng dụng 57 2 1 28 2 0 14 2 0 7 2 1 3 2 1 1 2 1 0 57 = 1110012 Ví dụ: 57 = ???2 Bài tập: đổi số từ cơ số 10 sang cơ số x
  • 13. Chương 3: Ngăn xếp – Hàng đợi Nội dung  Ngăn xếp (Stack)  Hàng đợi (Queue)  Khái niệm Queue  Các thao tác trên Queue  Hiện thực Queue  Ứng dụng Queue 13
  • 14. Chương 3: Ngăn xếp – Hàng đợi Queue - Khái niệm  Queue là một danh sách mà các đối tượng được thêm vào ở một đầu của danh sách và lấy ra ở một đầu kia của danh sách  Việc thêm một đối tượng luôn diễn ra ở cuối Queue và việc lấy ra một đối tượng luôn diễn ra ở đầu Queue  Vì thế, thao tác trên Queue được thực hiện theo cơ chế FIFO (First In First Out - Vào trước ra trước) 14
  • 15. Chương 3: Ngăn xếp – Hàng đợi Queue - Khái niệm 15 Imaging
  • 16. Chương 3: Ngăn xếp – Hàng đợi Queue – Các thao tác  Queue hỗ trợ 2 thao tác chính:  EnQueue(): Thêm đối tượng vào cuối (rear) Queue  DeQueue(): Lấy đối tượng ở đầu (front) Queue  Ví dụ: 5 3 2 - - 4  Queue còn hỗ trợ các thao tác:  isEmpty(): Kiểm tra xem Queue có rỗng không  Front(): Trả về giá trị phần tử nằm ở đầu Queue mà không hủy nó. Nếu Queue rỗng thì lỗi sẽ xảy ra 16 Front Rear
  • 17. Chương 3: Ngăn xếp – Hàng đợi Hiện thực Queue dùng DSLK 17  Có thể biểu diễn Queue bằng cách sử dụng DSLK đơn  Có 2 lựa chọn (cách nào tốt nhất?):  head sẽ là front, tail sẽ là rear  head sẽ là rear, tail sẽ là front b c m n front rear a b c m n rear front a
  • 18. Chương 3: Ngăn xếp – Hàng đợi Hiện thực Queue dùng DSLK 18  Khai báo các cấu trúc: struct Node { DataType data; Node *next; }; struct Queue { Node *front, *rear; };
  • 19. Chương 3: Ngăn xếp – Hàng đợi Hiện thực Queue dùng DSLK  Khởi tạo Queue rỗng:  Kiểm tra hàng đợi rỗng : 19 void Khoitao(Queue &q) { q.front = q.rear = NULL; } int isEmpty(Queue &q) { if ( q.front==NULL ) return 1; else return 0; }
  • 20. Chương 3: Ngăn xếp – Hàng đợi Hiện thực Queue dùng DSLK  Thêm một phần tử p vào cuối Queue: 20 void EnQueue(Queue &q, DataType x) { Node *p = new Node; if (p==NULL) exit(1); //Khong du bo nho p->next = NULL; p->data = x; if (q.front==NULL) // TH Queue rỗng q.front = q.rear = p; else { q.rear->next = p; q.rear = p; } }
  • 21. Chương 3: Ngăn xếp – Hàng đợi Hiện thực Queue dùng DSLK  Lấy phần tử ra khỏi Queue: 21 DataType DeQueue(Queue &q) { if (isEmpty(q)) { cout<<“Queue rong”;return 0; } Node *p = q.front; DataType x = p->data; q.front = q.front->pNext; if ( q.front==NULL ) q.rear = NULL; delete p; return x; }
  • 22. Chương 3: Ngăn xếp – Hàng đợi Hiện thực Queue dùng DSLK  Xem thông tin của phần tử ở đầu Queue: DataType Front(Queue q) { if (isEmpty(q)) { cout<<“Queue rong”; return 0; } return q.front->data; }

Editor's Notes

  1. insertions and deletions permitted at one end—
  2. DataType: kiểu dữ liệu tổng quát
  3. Trong tin học, CTDL hàng đợi có nhiều ứng dụng: khử đệ qui, tổ chức lưu vết các quá trình tìm kiếm theo chiều rộng và quay lui, vét cạn, tổ chức quản lý và phân phối tiến trình trong các hệ điều hành, tổ chức bộ đệm bàn phím, …
  4. DataType: là kiểu dữ liệu tổng quát