Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 21 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
21
Dung lượng
572,8 KB
Nội dung
DATA STRUCTURE AND ALGORITHM Queue CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT HÀNG ĐỢI Dr Dao Nam Anh Data Structure and Algorithm Outline – Nội dung Khái niệm Queue Các thao tác Queue Hiện thực Queue Ứng dụng Queue Data Structure and Algorithm Resource - Reference Slides adapted from David Matuszek, Marty Stepp and Hélène Martin, edit by Dao Nam Anh Major Reference: • Robert Sedgewick, and Kevin Wayne, “Algorithms” Princeton University, 2011, Addison Wesley • Algorithm in C (Parts 1-5 Bundle)- Third Edition by Robert Sedgewick, Addison-Wesley • Cấu trúc liệu giải thuật, Đinh Mạnh Tường • Giải thuật lập trình, Lê Minh Hồng, Đại Học Sư Phạm, 2002 Data Structure and Algorithm Queues • Queue danh sách mà đối tượng thêm vào đầu danh sách lấy đầu danh sách • Việc thêm đối tượng vào Queue diễn cuối Queue việc lấy đối tượng khỏi Queue diễn đầu Queue • Việc thêm đối tượng vào Queue lấy đối tượng khỏi Queue thực theo chế FIFO (First In First Out - Vào trước trước) Data Structure and Algorithm Queues Hàng đợi hỗ trợ thao tác: • Add - EnQueue(): Thêm đối tượng vào cuối (rear) Queue • Remove - DeQueue(): Lấy đối tượng đầu (front) Queue khỏi Queue • Peek: Examine the front element front remove, peek back add queue Data Structure and Algorithm Queues Queue hỗ trợ thao tác: • • isEmpty(): Kiểm tra xem hàng đợi có rỗng khơng Front(): Trả giá trị phần tử nằm đầu hàng đợi mà không hủy Nếu hàng đợi rỗng lỗi xảy front remove, peek back add queue Data Structure and Algorithm • Ứng dụng Hàng đợi Cuộc sống hàng ngày: Xếp hàng đợi thang máy Hàng xe tơ trạm xăng • Programming: Mơ hình hàng đợi khách hàng Hàng đợi phép tính cần tính • Hệ điều hành: Hàng đợi tệp máy in Hàng đợi chương trình để chạy Hàng đợi gói tin gửi lên mạng Data Structure and Algorithm Mô tả Queue mảng Có thể tạo Queue cách sử dụng mảng chiều theo kiểu xoay vòng (coi phần tử an-1 kề với phần tử a0) • • • Hàng đợi chứa tối đa N phần tử Phần tử đầu hàng đợi có số front Phần tử cuối hàng đợi có số rear myQueue: front = David Matuszek 17 23 97 44 rear = Data Structure and Algorithm Mô tả Queue mảng • • A queue is a first in, first out (FIFO) data structure This is accomplished by inserting at one end (the rear) and deleting from the other (the front) myQueue: front = • 17 23 97 44 23 rear = To insert: put new element in location 4, and set rear to David Matuszek Data Structure and Algorithm Mô tả Queue mảng • • A queue is a first in, first out (FIFO) data structure This is accomplished by inserting at one end (the rear) and deleting from the other (the front) myQueue: 17 23 97 44 front = • • rear = To insert: put new element in location 4, and set rear to To delete: take element from location 0, and set front to David Matuszek Data Structure and Algorithm 10 Mô tả Queue mảng rear = front = Ban đầu: • • 17 23 97 44 Chèn: 17 23 97 44 333 Xóa: 23 97 44 333 front = rear = Dùng mảng: Có xu hướng dời cuối mảng Hai cách thực: Khi lấy phần tử đồng thời dời lên vị trí Khi lấy phần tử khơng dời lên: Data Structure and Algorithm 11 Mô tả Queue danh sách vịng • Dùng mảng lưu Hàng đợi với danh sách vòng myQueue: rear = 5 11 front = • Thêm vào hàng đợi số 11, 22, 33, 44, 55, xóa thứ tự • Tính: front = (front + 1) % myQueue.length; và: rear = (rear + 1) % myQueue.length; Data Structure and Algorithm 12 Mơ tả Queue danh sách vịng • Dùng mảng lưu Hàng đợi với danh sách vòng myQueue: rear = 6 11 22 front = • Thêm vào hàng đợi số 11, 22, 33, 44, 55, xóa thứ tự • Tính: front = (front + 1) % myQueue.length; và: rear = (rear + 1) % myQueue.length; Data Structure and Algorithm 13 Mô tả Queue danh sách vịng • Dùng mảng lưu Hàng đợi với danh sách vòng myQueue: rear = 7 11 22 33 front = • Thêm vào hàng đợi số 11, 22, 33, 44, 55, xóa thứ tự • Tính: front = (front + 1) % myQueue.length; và: rear = (rear + 1) % myQueue.length; Data Structure and Algorithm 14 Mơ tả Queue danh sách vịng • Dùng mảng lưu Hàng đợi với danh sách vòng myQueue: 44 rear = 11 22 33 front = • Thêm vào hàng đợi số 11, 22, 33, 44, 55, xóa thứ tự • Tính: front = (front + 1) % myQueue.length; và: rear = (rear + 1) % myQueue.length; Data Structure and Algorithm 15 Mơ tả Queue danh sách vịng • Dùng mảng lưu Hàng đợi với danh sách vòng myQueue: 44 55 rear = 11 22 33 front = • Thêm vào hàng đợi số 11, 22, 33, 44, 55, xóa thứ tự • Tính: front = (front + 1) % myQueue.length; và: rear = (rear + 1) % myQueue.length; Data Structure and Algorithm 16 Full and empty queues • Hàng đợi đầy: myQueue: 44 55 66 77 88 11 22 33 rear = • front = Hàng đợi rỗng: myQueue: Đó vấn đề! rear = front = Data Structure and Algorithm 17 Full and empty queues: solutions • Giải pháp 1: Dùng thêm biến phụ myQueue: 44 55 66 77 88 11 22 33 count = • rear = front = Giải pháp 2: Giữ ô trống: Coi hàng đợi có n-1 myQueue: 44 55 66 77 rear = 11 22 33 front = Data Structure and Algorithm 18 Mô tả Queue danh sách nối đơn • • Có thể tạo hàng đợi sử dụng DSLK đơn Phần tử đầu DSKL (phead) phần tử đầu Queue (front), phần tử cuối DSKL (ptail) phần tử cuối Queue (rear) struct Node { DataType data; Node *pNext; }; struct Queue { Node *front, *rear; }; Data Structure and Algorithm 19 Mơ tả Queue danh sách nối đơn • Tương tự cài đặt Stack danh sách nối đơn kiểu LIFO, ta không kiểm tra Queue tràn trường hợp mô tả Queue danh sách nối đơn kiểu FIFO Data Structure and Algorithm 20 Discussion – Câu hỏi • https://sites.google.com/site/daonamanhedu/datastructure-algorithm Data Structure and Algorithm 21 ... sống hàng ngày: Xếp hàng đợi thang máy Hàng xe ô tơ trạm xăng • Programming: Mơ hình hàng đợi khách hàng Hàng đợi phép tính cần tính • Hệ điều hành: Hàng đợi tệp máy in Hàng đợi chương... Addison-Wesley • Cấu trúc liệu giải thuật, Đinh Mạnh Tường • Giải thuật lập trình, Lê Minh Hoàng, Đại Học Sư Phạm, 2002 Data Structure and Algorithm Queues • Queue danh sách mà đối tượng thêm vào đầu danh... xem hàng đợi có rỗng không Front(): Trả giá trị phần tử nằm đầu hàng đợi mà khơng hủy Nếu hàng đợi rỗng lỗi xảy front remove, peek back add queue Data Structure and Algorithm • Ứng dụng Hàng đợi