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

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

Đ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

Lecture 11 – Hàng đợi (Queues) 11.1 Khái niệm hàng đợi 11.2 Cài đặt hàng đợi mảng 11.2.1 Các thao tác 11.2.2 Các thao tác bổ trợ 11.3 Cài đặt hàng đợi trỏ (Linked list) 11.4 Vài ứng dụng hàng đợi 11.4.1 Palindromes 11.4.2 Demerging 11.4.3 Tính giá trị biểu thức 11.4 Bài tập thực hành PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n / 24 Lecture 11 – Hàng đợi (Queues) 11.1 Khái niệm hàng đợi 11.2 Cài đặt hàng đợi mảng 11.2.1 Các thao tác 11.2.2 Các thao tác bổ trợ 11.3 Cài đặt hàng đợi trỏ (Linked list) 11.4 Vài ứng dụng hàng đợi 11.4.1 Palindromes 11.4.2 Demerging 11.4.3 Tính giá trị biểu thức 11.4 Bài tập thực hành PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n / 24 11.1 Khái niệm hàng đợi PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n / 24 11.1 Khái niệm hàng đợi  Trong ứng dụng máy tính, định nghĩa CTDL hàng đợi danh sách, việc thêm phần tử thực đầu danh sách (cuối hàng đợi) việc lấy phần tử thực cuối danh sách (đầu hàng)  Hàng đợi gọi danh sách FIFO (First In First Out) PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n / 24 11.1 Khái niệm hàng đợi  Định nghĩa: Một hàng đợi phần tử kiểu T chuỗi nối tiếp phần tử T kèm theo số tác vụ sau:  Tạo đối tượng hàng rỗng;  Thêm phần tử vào hàng, giả sử hàng đợi chưa đầy (phần tử liệu thêm vào cuối hàng);  Loại phần tử khỏi hàng, giả sử hàng chưa rỗng (phần tử bị loại phần tử đầu hàng, thường phần tử vừa xử lý xong);  Xem phần tử đầu hàng (phần tử xử lý) PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n / 24 11.1 Khái niệm hàng đợi   Số lượng ứng dụng hàng đợi không thua (hơn) ngăn xếp VD: máy tính làm việc, có nhiều hàng đợi chức khá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 Phần tử đầu hàng đợi phục vụ trước, phần tử thường gọi front hay head Phần tử thêm vào gọi rear hay tail PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n / 24 11.1 Khái niệm hàng đợi  Một số dạng 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 việc thiếu nhớ 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 độ ưu tiên  Khi chương trình cần lấy phần tử khỏi hàng đợi, xét phần tử có độ ưu tiên cao trước  Multi-Headed Queues PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n / 24 Lecture 11 – Hàng đợi (Queues) 11.1 Khái niệm hàng đợi 11.2 Cài đặt hàng đợi mảng 11.2.1 Các thao tác 11.2.2 Các thao tác bổ trợ 11.3 Cài đặt hàng đợi trỏ (Linked list) 11.4 Vài ứng dụng hàng đợi 11.4.1 Palindromes 11.4.2 Demerging 11.4.3 Tính giá trị biểu thức 11.4 Bài tập thực hành PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n / 24 11.2 Cài đặt hàng đợi mảng  Cài đặt hàng đợi 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 phần tử 0, 1, 2, 3: front = 0; rear = 3; Lấy phần tử: front = 2; rear = 3; Tiếp tục thêm vào phần tử: front = 2; rear = 5; Tiếp tục thêm vào phần tử nữa: front = 2; rear = 7; Hàng đợi đầy, thêm nữa; PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n / 24 11.2 Cài đặt hàng đợi mảng  Cài đặt:  Tạo mảng với kích cỡ cho trước (n);  Dùng biến front rear để quản lý index phần tử cuối 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 hàng đợi chưa đầy: rear = rear +1;  Cho phép xóa phần tử hàng đợi không rỗng: front = front + 1; PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n 10 / 24 11.3 Cài đặt hàng đợi DSLK  Danh sách liên kết đơn cấu trúc liệu bao gồm tập nút, mà nút bao gồm:  Dữ liệu cần lưu trữ;  Liên kết đến nút Link next Data Node 60 1000 800 45 90 55 800 PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n 90 15 / 24 NULL 11.3 Cài đặt hàng đợi DSLK  Khai báo cấu trúc liệu liên kết struct Node{ int info; struct Node *next; }; typedef struct Node *QueueNode; typedef struct{ QueueNode head ; QueueNode tail ; }Queue; PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n 16 / 24 11.3 Cài đặt hàng đợi DSLK  Thêm phần tử vào hàng đợi void Put(Queue &q, int x){ QueueNode ql 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; } } PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n 17 / 24 = (QueueNode) 11.3 Cài đặt hàng đợi DSLK  Xóa phần tử 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; } } PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n 18 / 24 11.3 Cài đặt hàng đợi DSLK  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); } PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n 19 / 24 Lecture 11 – Hàng đợi (Queues) 11.1 Khái niệm hàng đợi 11.2 Cài đặt hàng đợi mảng 11.2.1 Các thao tác 11.2.2 Các thao tác bổ trợ 11.3 Cài đặt hàng đợi trỏ (Linked list) 11.4 Vài ứng dụng hàng đợi 11.4.1 Palindromes 11.4.2 Demerging 11.4.3 Tính giá trị biểu thức 11.4 Bài tập thực hành PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n 20 / 24 11.4.1 Palindromes     Khái niệm: Một chuỗi gọi Palindrome đọc xuôi giống đọc ngược Bài toán: Cho trước chuỗi, kiểm tra xem chuỗi có phải chuỗi palindrome hay khơng? Ví dụ chuỗi palindrome: Able was I ere I saw Elba Giải pháp:  Để tránh ảnh hưởng tới chuỗi ban đầu, đọc chuỗi nói vào stack queue  So sánh phần tử stack queue, giống cặp chuỗi Palindrome, ngược lại chuỗi khơng phải chuỗi Palindrome PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n 21 / 24 Lecture 11 – Hàng đợi (Queues) 11.1 Khái niệm hàng đợi 11.2 Cài đặt hàng đợi mảng 11.2.1 Các thao tác 11.2.2 Các thao tác bổ trợ 11.3 Cài đặt hàng đợi trỏ (Linked list) 11.4 Vài ứng dụng hàng đợi 11.4.1 Palindromes 11.4.2 Demerging 11.4.3 Tính giá trị biểu thức 11.4 Bài tập thực hành PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n 22 / 24 11.4.2 Demerging   Tổ chức liệu hợp lý - Demerging Bài toán: Xem xét toán sau:     Giả sử, với hệ thống quản lý nhân Các ghi lưu file Mỗi ghi gồm trường: Họ tên, giới tính, ngày tháng năm sinh, Dữ liệu theo ngày tháng năm sinh Cần tổ chức lại liệu cho nữ liệt kê trước nam giữ tính theo ngày tháng năm sinh PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n 23 / 24 11.4.2 Demerging  Tổ chức liệu hợp lý - Demerging  Cách giải quyết:  Ý tưởng không hiệu quả:  Sử dụng thuật toán xếp  Độ phức tạp thuật toán O(n log n) trường hợp tốt  Ý tưởng hiệu hơn:  Sử dụng giải thuật demerging  Độ phức tạp giải thuật O(n) PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n 24 / 24 11.4.2 Demerging  Giải thuật Demerging: Tạo queue rỗng, có tên NU NAM Với ghi p, xem xét: Nếu p có giới tính nữ, đưa vào queue NU Nếu p có giới tính nam, đưa vào queue NAM Xét queue NU, queue chưa rỗng: Lấy phần tử queue Ghi vào file output Xét queue NAM, queue chưa rỗng: Lấy phần tử queue Ghi tiếp vào file output Kết thúc giải thuật PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n 25 / 24 Lecture 11 – Hàng đợi (Queues) 11.1 Khái niệm hàng đợi 11.2 Cài đặt hàng đợi mảng 11.2.1 Các thao tác 11.2.2 Các thao tác bổ trợ 11.3 Cài đặt hàng đợi trỏ (Linked list) 11.4 Vài ứng dụng hàng đợi 11.4.1 Palindromes 11.4.2 Demerging 11.4.3 Tính giá trị biểu thức 11.4 Bài tập thực hành PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n 26 / 24 11.4.3 Tính giá trị biểu thức  VD Tính giá trị biểu thức sau: (((2 + 3) * / 8) – + 3) / + * (5 - 1) = ?  Ý tưởng:  Tính nhẩm?  Dùng máy tính Casio?  Viết chương trình tính tốn tự động? PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n 27 / 24 Lecture 11 – Hàng đợi (Queues) 11.1 Khái niệm hàng đợi 11.2 Cài đặt hàng đợi mảng 11.2.1 Các thao tác 11.2.2 Các thao tác bổ trợ 11.3 Cài đặt hàng đợi trỏ (Linked list) 11.4 Vài ứng dụng hàng đợi 11.4.1 Palindromes 11.4.2 Demerging 11.4.3 Tính giá trị biểu thức 11.4 Bài tập thực hành PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n 28 / 24 11.4 Bài tập thực hành Cài đặt hàng đợi mảng di chuyển mảng bị tràn Cài đặt hàng đợi mảng xoay vịng khơng xử dụng biến count Dùng Queue kiểm tra chuỗi ký tự có đối xứng khơng? Cài đặt thuật tốn duyệt đồ thị theo chiều rộng(BFS) sử dụng hàng đợi PhD Tốố g Minh Đức – Mob: 0984-485-888 – Email: tmduc08@Gmail.com n 29 / 24 .. .Lecture 11 – Hàng đợi (Queues) 11. 1 Khái niệm hàng đợi 11. 2 Cài đặt hàng đợi mảng 11. 2.1 Các thao tác 11. 2.2 Các thao tác bổ trợ 11. 3 Cài đặt hàng đợi trỏ (Linked list) 11. 4 Vài ứng... tmduc08@Gmail.com n / 24 Lecture 11 – Hàng đợi (Queues) 11. 1 Khái niệm hàng đợi 11. 2 Cài đặt hàng đợi mảng 11. 2.1 Các thao tác 11. 2.2 Các thao tác bổ trợ 11. 3 Cài đặt hàng đợi trỏ (Linked list) 11. 4 Vài ứng... tmduc08@Gmail.com n 13 / 24 Lecture 11 – Hàng đợi (Queues) 11. 1 Khái niệm hàng đợi 11. 2 Cài đặt hàng đợi mảng 11. 2.1 Các thao tác 11. 2.2 Các thao tác bổ trợ 11. 3 Cài đặt hàng đợi trỏ (Linked list) 11. 4 Vài ứng

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

Từ khóa liên quan

Mục lục

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan