1. Trang chủ
  2. » Công Nghệ Thông Tin

Cấu Trúc Dữ Liệu Và Giải Thuật Chapter 4.2 Queue Trong Lập Trình

29 141 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 29
Dung lượng 657,29 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Cấu Trúc Dữ Liệu Và Giải Thuật Chapter 4.2 Queue Trong Lập Trình Tài Liệu Bao Gồm 6 Chapter Mong các bạn theo dõi đầy đủ để đạt kết quả cao . Để Cập Nhật Thêm Tìm Hiểu Hơn Nữa Về Tài Liệu IT Thì Các Bạn Có Thể Truy Cập : https:123doc.orgtrangcanhan4336953tailieuit.htm CẢM ƠN CÁC BẠN ĐÃ THEO DÕI

Trang 1

Phần 2: Hàng đợi (Queue)

Trang 2

2

Hàng đợi ( Queue)

Theo cơ chế FIFO (First In First Out)

 Các đối tượng có thể được thêm vào hàng đợi bất

kỳ lúc nào

 Chỉ có đối tượng thêm vào đầu tiên mới được phép lấy ra khỏi hàng đợi

Trang 3

Giới thiệu

 Vào, ra dữ liệu:

Trang 5

Biếu diễn Queue

Kích thước stack

khi quá thiếu, lúc

quá thừa

Cấp phát động!

Push / Pop hơi

phức tạp

Push/Pop khá dễ dàng

Trang 6

6

Biểu diễn Queue dùng mảng

 Biểu diễn một Queue bằng mảng:

 Mảng một chiều Ary lưu các phần tử dữ liệu

 Hằng số N cho biết kích thước (số phần tử tối đa) của hàng đợi

 Hai biến nguyên front, rear cho biết chỉ số của đầu và cuối của hàng đợi

Trang 7

typedef struct item

{

int data ;

};

Biểu diễn Queue bằng mảng

typedef struct queue

{

int front, rear;

Cấu trúc một phần tử dữ liệu

Cấu trúc hàng

đợi

Trang 8

179/44

Các thao tác cơ bản trên Queue

Khởi tạo Queue: Init (q)

Kiểm tra Queue rỗng: IsEmpty (q)

Kiểm tra Queue đầy: IsFull (q)

 Thêm phần tử vào Queue: Add(q, x)

Lấy phần tử ra khỏi Queue: Remove (q)

8

Biểu diễn Queue bằng mảng

Trang 9

Biểu diễn Queue dùng mảng

 Khởi tạo Queue:

 Lệnh khởi tạo front = 0 và rear = 0 sẽ tạo ra một

queue rỗng

 Đảm bảo các thao tác trên queue thực hiện đúng đắn

Thuật toán:

+Vào: Queue cần khởi tạo

+ Ra: Queue sau khi khởi tao

Trang 10

10

Biểu diễn Queue dùng mảng

Cài đặt:

int IsEmpty(Queue q) {

if (q.front > q.rear)

return 1;

return 0;

}

 Kiểm tra Queue rỗng:

 Được gọi đến trước khi thực hiện thao tác lấy một

phần tử ra khỏi queue

 Queue rống nếu front = 0 hoặc front > rear

Thuật toán:

+ Ra: giá trị 0 hoặc 1

B1) if front = 0 or front > rear

then return 1;

else return 0;

BKT) Kết thúc;

Trang 11

Biểu diễn Stack dùng mảng

Kiểm tra Queue đầy

 Được gọi đến trước khi thực hiện thao tác đưa một phần tử vào queue

 Queue đầy nếu rear= N-1

Cài đặt:

int IsFull (queue q) {

if (q.rear==N-1) return 1;

return 0;

Thuật toán:

+ Ra: giá trị 0 hoặc 1

B1) if rear= N-1 then return 1;

else return 0;

BKT) Kết thúc;

Trang 12

12

Biểu diễn Stack dùng mảng

Thêm một phần tử vào queue

 Việc thêm phần tử luôn được thực hiện ở cuối hàng đợi

Thuật toán

 Vào: Queue q, phần tử dữ liệu x

 Ra: q với phần tử dữ liệu x ở cuối hàng đợi

B1) Kiểm tra nếu queue đầy thì thực hiện BKT;

Ngược lại, thực hiện B2;

B2) lưu phần tử dữ liệu x vào queue:

2.1) Tăng rear lên 1;

2.2) Giá trị phần tử với chỉ số rear = x;

BKT) Kết thúc;

Trang 13

Biểu diễn Queue dùng mảng

Thêm một phần tử vào hàng đợi

Void Add (queue &q, item x){

if (!Full(q)) //Queue chưa đầy

Trang 14

14

Lấy phần tử ra khỏi queue

Thuật toán

 Vào: Queue q;

 Ra: Giá trị phần tử cuối hàng đợi x

B1) Kiểm tra nếu queue rỗng thì thực hiện BKT; Ngược lại, thực hiện B2;

B2) Lấy phần tử ra khỏi hàng đợi

2.1) x  giá trị phần tử ở đầu hàng đợi (front); 2.2) Tăng chỉ số fron lên 1;

BKT) Kết thúc;

Biểu diễn Queue dùng mảng

Trang 15

Lấy một phần tử ra khỏi hàng đợi

Trang 16

16

Nhận xét:

 Ưu điểm:

• Các thao tác trên queue làm việc với chi phí O(1)

• Việc cài đặt queue thông qua mảng một chiều đơn giản và khá hiệu quả

 Hạn chế:

• Giới hạn về kích thước của queue N

• Giá trị của N có thể quá nhỏ so với nhu cầu thực tế hoặc quá lớn sẽ làm lãng phí bộ nhớ

Khắc phục: Sử dụng DSLK đơn để biểu diễn queue

Biểu diễn Queue dùng mảng

Trang 17

 Cĩ thể tạo một hàng đợi sử dụng một DSLK đơn

 Phần tử đầu DSKL (pHead) sẽ là phần tử đầu hàng đợi, phần tử cuối DSKL (pTail) sẽ là phần

tử cuối hàng đợi

a 1 a 2 a N-2 a n-1 Đầu hàng

Cuối hàng

a 0

Biểu diễn Queue bằng DSLK

Trang 19

Các thao tác cơ bản trên Queue

Khởi tạo queue: Init (q)

Kiểm tra queue rỗng: IsEmpty (q)

Tạo mới một nút chứa dữ liệu x: CreateNode(x)

 Thêm phần tử vào queue: Add(q, x)

Lấy phần tử ra khỏi queue: Remove (q)

Biểu diễn Queue bằng DSLK

Trang 20

20

Biểu diễn Queue dùng mảng

 Khởi tạo Queue:

 Lệnh khởi tạo front = rear = NULL sẽ tạo ra một

queue rỗng

Thuật toán:

+Vào: Queue cần khởi tạo

+ Ra: Queue sau khi khởi tao

B1) Gán front = rear = NULL

Trang 21

Biểu diễn Queue dùng mảng

Cài đặt:

int IsEmpty(Queue q) {

if (q.front == NULL)

return 1;

return 0;

}

 Kiểm tra Queue rỗng:

 Queue rỗng nếu front = NULL

Thuật toán:

+ Ra: giá trị 0 hoặc 1

B1) if front = NULL then return 1;

else return 0;

BKT) Kết thúc;

Trang 23

Biểu diễn Stack dùng mảng

Thêm một phần tử vào queue

 Việc thêm phần tử luôn được thực hiện ở cuối hàng đợi

Thuật toán

 Vào: Queue q, phần tử dữ liệu x

 Ra: q với phần tử dữ liệu x ở cuối hàng đợi

B1) NewNode  Tạo mới nút chứa dữ liệu x;

B2) Nếu tạo nút thành công thì

- Kiểm tra nếu front = NULL thì

front = rear = NewNode

Trang 24

24

Biểu diễn Stack dùng mảng

B3) Ngược lại, chèn vào cuối danh sách:

+ q.rear->Next = NewNode;

+ q.rear = NewNode;

BKT) Kết thúc;

Trang 25

Thêm một phần tử vào queue

Trang 26

26

Lấy phần tử ra khỏi queue

Thuật toán

 Vào: Queue q;

 Ra: Phần tử ở đầu hàng đợi p

B1) Kiểm tra nếu queue rỗng thì thực hiện BKT; Ngược lại, thực hiện B2;

B2) Lấy phần tử ra khỏi hàng đợi

2.1) p  giá trị phần tử ở đầu hàng đợi (front); 2.2) Điều chỉnh front = front->Next;

BKT) Kết thúc;

Biểu diễn Queue dùng mảng

Trang 27

Lấy phần tử ra khỏi queue

Trang 29

Sử dụng Queue

 Hàng đợi có thể được sử dụng trong một số

bài toán:

 Bài toán „sản xuất và tiêu thụ‟ (ứng dụng trong

các hệ điều hành song song)

 Bộ đệm (ví dụ: Nhấn phím  Bộ đệm  CPU

xử lý)

 Xử lý các lệnh trong máy tính (ứng dụng trong

HĐH, trình biên dịch), hàng đợi các tiến trình chờ được xử lý, …

Ngày đăng: 11/04/2019, 17:41

TỪ KHÓA LIÊN QUAN

w