1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Lecture 11 queues tài liệu Kỹ thuật Lập trình

29 471 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 503,04 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ài đặt hàng đợi bằng con trỏ Linked list 11.4.. Cài đặt hàng đợi bằng con trỏ Linked list 11.4.. Khái niệm về hàng đợiTrong ứng dụng máy tính, định nghĩa CTDL hàng đợi là danh sách, t

Trang 1

Lecture 11 – Hàng đợi (Queues)

11.1 Khái niệm về hàng đợi

11.2 Cài đặt hàng đợi bằng mảng

11.2.1 Các thao tác cơ bản

11.2.2 Các thao tác bổ trợ

11.3 Cài đặt hàng đợi bằng con trỏ (Linked list)

11.4 Vài ứng dụng của hàng đợi

11.4.1 Palindromes

11.4.2 Demerging

11.4.3 Tính giá trị của biểu thức

11.4 Bài tập thực hành

Trang 2

Lecture 11 – Hàng đợi (Queues)

11.1 Khái niệm về hàng đợi

11.2 Cài đặt hàng đợi bằng mảng

11.2.1 Các thao tác cơ bản

11.2.2 Các thao tác bổ trợ

11.3 Cài đặt hàng đợi bằng con trỏ (Linked list)

11.4 Vài ứng dụng của hàng đợi

11.4.1 Palindromes

11.4.2 Demerging

11.4.3 Tính giá trị của biểu thức

11.4 Bài tập thực hành

Trang 3

11.1 Khái niệm về hàng đợi

Trang 4

11.1 Khái niệm về hàng đợi

Trong ứng dụng máy tính, định nghĩa CTDL hàng đợi là

danh sách, trong đó việc thêm một phần tử được thực hiện ở đầu một danh sách (cuối hàng đợi) và việc lấy ra một phần tử được thực hiện ở cuối danh sách (đầu hàng).

Hàng đợi còn được gọi là danh sách FIFO (First In First

Out).

Trang 5

11.1 Khái niệm về hàng đợi

Định nghĩa: Một hàng đợi các phần tử kiểu T là một chuỗi nối tiếp các phần tử của T và kèm theo một số tác vụ sau:

 Tạo mới một đối tượng hàng rỗng;

 Thêm một phần tử mới vào hàng, giả sử hàng đợi chưa đầy (phần tử dữ liệu mới luôn được thêm vào cuối hàng);

 Loại một phần tử ra khỏi hàng, giả sử hàng chưa rỗng (phần

tử bị loại là phần tử tại đầu hàng, thường là phần tử vừa được xử lý xong);

 Xem phần tử tại đầu hàng (phần tử sắp được xử lý)

Trang 6

11.1 Khái niệm về hàng đợi

Số lượng ứng dụng của hàng đợi không thua kém (hơn) ngăn xếp.

VD: khi máy tính làm việc, có nhiều hàng đợi chức năng khác nhau được sử dụng:

 hàng đợi máy in;

 việc truy xuất đĩa;

 sử dụng CPU;

 chuyển đổi từ Infix sang Prefix

thường gọi là front hay head

Phần tử mới thêm vào được gọi là rear hay tail

Trang 7

11.1 Khái niệm về hàng đợi

Một số dạng của hàng đợi :

 Hàng đợi tuyến tính - Linear Queues

Tổ chức hàng đợi theo nghĩa thông thường

 Hàng đợi vòng - Circular Queues

Giải quyết việc thiếu bộ nhớ khi sử dụng hàng đợi

 Hàng đợi ưu tiên - Priority Queues

Mỗi phần tử có kết hợp thêm thông tin về độ ưu tiên

Khi chương trình cần lấy một phần tử khỏi hàng đợi, nó sẽ xét những phần tử có độ ưu tiên cao trước

Multi-Headed Queues.

Trang 8

Lecture 11 – Hàng đợi (Queues)

11.1 Khái niệm về hàng đợi

11.2 Cài đặt hàng đợi bằng mảng

11.2.1 Các thao tác cơ bản

11.2.2 Các thao tác bổ trợ

11.3 Cài đặt hàng đợi bằng con trỏ (Linked list)

11.4 Vài ứng dụng của hàng đợi

11.4.1 Palindromes

11.4.2 Demerging

11.4.3 Tính giá trị của biểu thức

11.4 Bài tập thực hành

Trang 9

0 1 2 3 4 5 6 7

11.2 Cài đặt hàng đợi bằng mảng

Cài đặt hàng đợi bằng mảng tuyến tính :

 Lúc khởi tạo hàng đợi rỗng: front = rear = -1

 Lần lượt thêm các phần tử 0, 1, 2, 3: front = 0; rear = 3;

 Lấy ra lần lượt 2 phần tử: front = 2; rear = 3;

 Tiếp tục thêm vào 2 phần tử: front = 2; rear = 5;

 Tiếp tục thêm vào 2 phần tử nữa: front = 2; rear = 7;

 Hàng đợi đầy, không thể thêm được nữa;

Trang 10

11.2 Cài đặt hàng đợi bằng mảng

Cài đặt:

 Tạo mới một mảng với kích cỡ cho trước (n);

Dùng 2 biến front và rear để quản lý index của phần tử đầu

tiên và cuối cùng trong hàng đợi;

Thao tác khởi tạo hàng đợi: front = rear = -1;

Hàng đợi rỗng: front = rear;

Hàng đợi đầy: rear = n-1;

Cho phép thêm phần tử vào hàng đợi khi hàng đợi chưa đầy: rear = rear +1;

Cho phép xóa phần tử khi hàng đợi không rỗng: front = front + 1;

Trang 11

11.2 Cài đặt hàng đợi bằng mảng

Một số nhận xét cho dạng Queue nói trên:

Đáp ứng được các tiêu chí về Queue.

 Tuy nhiên, với kích thước Queue là 8 (theo ví dụ) chỉ có thể thêm tối đa 8 phần tử

Ngoài ra, vì front chỉ tăng, do đó, trong Queue vẫn còn ô

nhớ nhưng không sử dụng được

Giải quyết vấn đề trên:

Sử dụng Queue có dạng vòng.

 Khi đó, làm thế nào để biết Queue đã đầy hay rỗng?

Giá trị khởi tạo cho front và rear như thế nào?

Xây dựng Queue như thế nào?

Trang 12

5 6

7

Trang 13

11.2 Cài đặt hàng đợi bằng mảng

Cài đặt:

Tạo mới một mảng với kích cỡ cho trước (n);

Dùng 2 biến front và rear để quản lý index của phần tử đầu

tiên và cuối cùng trong hàng đợi;

Thao tác khởi tạo: front = rear = 0;

Hàng đợi rỗng: front = rear;

Hàng đợi đầy: (rear+1) mod n == front.

Cho phép thêm phần tử vào hàng đợi khi rear hàng đợi chưa đầy: rear = (rear + 1) mod n;

Cho phép xóa khi hàng đợi không rỗng:

front = (front + 1) mod n;

Trang 14

Lecture 11 – Hàng đợi (Queues)

11.1 Khái niệm về hàng đợi

11.2 Cài đặt hàng đợi bằng mảng

11.2.1 Các thao tác cơ bản

11.2.2 Các thao tác bổ trợ

11.3 Cài đặt hàng đợi bằng con trỏ (Linked list)

11.4 Vài ứng dụng của hàng đợi

11.4.1 Palindromes

11.4.2 Demerging

11.4.3 Tính giá trị của biểu thức

11.4 Bài tập thực hành

Trang 16

Khai báo cấu trúc dữ liệu

11.3 Cài đặt hàng đợi bằng DSLK

Trang 17

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

hàng đợi

void Put(Queue &q, int x){

QueueNode ql = (QueueNode) malloc(sizeof(struct Node));

ql->info=x;

ql->next=NULL;

if(QueueEmpty(q)) {q.head=q.tail=ql;

}

else{q.tail->next=ql;

q.tail=ql;

}

11.3 Cài đặt hàng đợi bằng DSLK

Trang 18

Xóa một phần tử ra khỏi

hàng đợi

int Get(Queue &q){

if(QueueEmpty(q))printf("Queue is empty!");

else{QueueNode temp=q.head;

int x=temp->info;

q.head=q.head->next;

if(temp->next=NULL) q.tail=NULL;

free(temp);

return x;

}}

11.3 Cài đặt hàng đợi bằng DSLK

Trang 19

Khởi tạo hàng đợi

Kiểm tra hàng đợi có rỗng

không

void QueueInitialize(Queue

&q){q.head=NULL;

q.tail=NULL;

}

int QueueEmpty(Queue q){

return (q.head==NULL);

}

11.3 Cài đặt hàng đợi bằng DSLK

Trang 20

Lecture 11 – Hàng đợi (Queues)

11.1 Khái niệm về hàng đợi

11.2 Cài đặt hàng đợi bằng mảng

11.2.1 Các thao tác cơ bản

11.2.2 Các thao tác bổ trợ

11.3 Cài đặt hàng đợi bằng con trỏ (Linked list)

11.4 Vài ứng dụng của hàng đợi

11.4.1 Palindromes

11.4.2 Demerging

11.4.3 Tính giá trị của biểu thức

11.4 Bài tập thực hành

Trang 22

Lecture 11 – Hàng đợi (Queues)

11.1 Khái niệm về hàng đợi

11.2 Cài đặt hàng đợi bằng mảng

11.2.1 Các thao tác cơ bản

11.2.2 Các thao tác bổ trợ

11.3 Cài đặt hàng đợi bằng con trỏ (Linked list)

11.4 Vài ứng dụng của hàng đợi

11.4.1 Palindromes

11.4.2 Demerging

11.4.3 Tính giá trị của biểu thức

11.4 Bài tập thực hành

Trang 23

11.4.2 Demerging

Tổ chức dữ liệu hợp lý - Demerging

Bài toán : Xem xét bài toán sau:

 Giả sử, với một hệ thống quản lý nhân sự Các bản ghi được lưu trên file

 Mỗi bản ghi gồm các trường: Họ tên, giới tính, ngày tháng năm sinh,

 Dữ liệu trên đã được sắp theo ngày tháng năm sinh

 Cần tổ chức lại dữ liệu sao cho nữ được liệt kê trước nam nhưng vẫn giữ được tính đã sắp theo ngày tháng năm sinh

Trang 24

Ý tưởng hiệu quả hơn:

Sử dụng giải thuật demerging.

Độ phức tạp của giải thuật này là O(n)

Trang 25

11.4.2 Demerging

Giải thuật Demerging:

Trang 26

Lecture 11 – Hàng đợi (Queues)

11.1 Khái niệm về hàng đợi

11.2 Cài đặt hàng đợi bằng mảng

11.2.1 Các thao tác cơ bản

11.2.2 Các thao tác bổ trợ

11.3 Cài đặt hàng đợi bằng con trỏ (Linked list)

11.4 Vài ứng dụng của hàng đợi

11.4.1 Palindromes

11.4.2 Demerging

11.4.3 Tính giá trị của biểu thức

11.4 Bài tập thực hành

Trang 27

11.4.3 Tính giá trị của biểu thức

VD Tính giá trị của biểu thức sau:

Trang 28

Lecture 11 – Hàng đợi (Queues)

11.1 Khái niệm về hàng đợi

11.2 Cài đặt hàng đợi bằng mảng

11.2.1 Các thao tác cơ bản

11.2.2 Các thao tác bổ trợ

11.3 Cài đặt hàng đợi bằng con trỏ (Linked list)

11.4 Vài ứng dụng của hàng đợi

11.4.1 Palindromes

11.4.2 Demerging

11.4.3 Tính giá trị của biểu thức

11.4 Bài tập thực hành

Ngày đăng: 28/08/2014, 21:58

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm