1. Trang chủ
  2. » Giáo án - Bài giảng

Bài giảng cấu trúc dữ liệu và giải thuật hàng đợi TS đào nam anh

21 170 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 21
Dung lượng 572,8 KB

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

Nội dung

Outline – Nội dung Khái niệm Queue  Các thao tác trên Queue  Hiện thực Queue  Ứng dụng của Queue... • 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à

Trang 1

DATA STRUCTURE AND ALGORITHM

Trang 2

Outline – Nội dung

 Khái niệm Queue

 Các thao tác trên Queue

 Hiện thực Queue

 Ứng dụng của Queue

Trang 3

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 dữ liệu và giải thuật, Đinh Mạnh Tường

• Giải thuật và lập trình, Lê Minh Hoàng, Đại Học

Sư Phạm, 2002

Trang 4

• 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 vào Queue luôn diễn ra ở cuối

Queue và việc lấy một đối tượng ra khỏi Queue luôn diễn ra

ở đầu Queue

• Việc thêm một đối tượng vào Queue hoặc lấy một đối tượng

ra khỏi Queue được thực hiện theo cơ chế FIFO (First In

First Out - Vào trước ra trước)

Trang 5

Hàng đợi hỗ trợ các 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 ra khỏi Queue

Peek: Examine the front element.

queue

front back

remove, peek

Trang 6

Queue còn hỗ trợ các thao tác:

isEmpty(): Kiểm tra xem hàng đợi có rỗng không

Front(): Trả về giá trị của phần tử nằm ở đầu

hàng đợi mà không hủy nó Nếu hàng đợi rỗng thì

Trang 7

Ứng dụng Hàng đợi

 Xếp hàng đợi thang máy

 Hàng xe ô tô tại trạm xăng

 Hàng đợi các chương trình để chạy

 Hàng đợi các gói tin gửi lên mạng

Trang 8

Mô tả Queue bằng mảng

Có thể tạo một Queue bằng cách sử dụng một mảng 1 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 sẽ có chỉ số front

Phần tử ở cuối hàng đợi sẽ có chỉ số rear

17 23 97 44

0 1 2 3 4 5 6 7

myQueue:

rear = 3front = 0

Trang 9

Mô tả Queue bằng 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)

To insert: put new element in location 4, and set rear to 4

0 1 2 3 4 5 6 7

myQueue:

rear = 4front = 0

David Matuszek

Trang 10

Mô tả Queue bằng 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)

To insert: put new element in location 4, and set rear to 4

To delete: take element from location 0, and set front to 1

0 1 2 3 4 5 6 7

myQueue:

rear = 3front = 1

Trang 11

Mô tả Queue bằng mảng

• Dùng mảng: Có xu hướng dời về cuối mảng

• Hai cách hiện thực:

 Khi lấy một phần tử ra thì đồng thời dời ô lên một vị trí

 Khi lấy một phần tử ra thì không dời ô lên:

17 23 97 44

Ban đầu:

rear = 3front = 0

Trang 12

Mô tả Queue bằng danh sách vòng

• Dùng mảng lưu Hàng đợi với danh sách vòng

Trang 13

Mô tả Queue bằng danh sách vòng

• Dùng mảng lưu Hàng đợi với danh sách vòng

• Tính: front = (front + 1) % myQueue.length;

và: rear = (rear + 1) % myQueue.length;

Trang 14

Mô tả Queue bằng danh sách vòng

• Dùng mảng lưu Hàng đợi với danh sách vòng

Trang 15

Mô tả Queue bằng danh sách vòng

• Dùng mảng lưu Hàng đợi với danh sách vòng

• Tính: front = (front + 1) % myQueue.length;

và: rear = (rear + 1) % myQueue.length;

Trang 16

Mô tả Queue bằng danh sách vòng

• Dùng mảng lưu Hàng đợi với danh sách vòng

Trang 17

Full and empty queues

Trang 18

Full and empty queues: solutions

Giải pháp 1: Dùng thêm 1 biến phụ

Giải pháp 2: Giữ 1 ô trống: Coi như hàng đợi chỉ có n-1 ô

Trang 19

Mô tả Queue bằng danh sách nối đơn

• 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 Queue

(front), phần tử cuối DSKL (ptail) sẽ là phần tử cuối

Queue (rear)

struct Node {

DataType data;

Node *pNext;

};

struct Queue {

Node *front, *rear;

Trang 20

Mô tả Queue bằng danh sách nối đơn

• Tương tự như cài đặt Stack bằng danh sách nối đơn

kiểu LIFO, ta cũng không kiểm tra Queue tràn trong

trường hợp mô tả Queue bằng danh sách nối đơn kiểu

FIFO

Trang 21

Discussion – Câu hỏi

https://sites.google.com/site/daonamanhedu/data-structure-algorithm

Ngày đăng: 06/11/2017, 12:35

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

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