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

Tài liệu Hàng đợi, sử dụng mảng doc

33 498 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Hàng đợi, sử dụng mảng doc
Trường học Unknown University
Chuyên ngành Data Structures
Thể loại Giáo trình
Định dạng
Số trang 33
Dung lượng 726 KB

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

Nội dung

Hàng đợi• Cấu trúc dữ liệu hoạt động theo cơ chế first-in first-out FIFO • Hai thao tác cơ bản: – Chèn vào hàng đợi: enqueue – Lấy ra khỏi hàng đợi: dequeue • Các đối tượng trong hàng đ

Trang 1

Hàng đợi

• Cấu trúc dữ liệu hoạt động theo cơ chế first-in

first-out (FIFO)

• Hai thao tác cơ bản:

– Chèn vào hàng đợi: enqueue

– Lấy ra khỏi hàng đợi: dequeue

• Các đối tượng trong hàng đợi được sắp thứ tự theo thời gian chúng được chèn vào hàng

• Đối tượng được lấy ra khỏi hàng đợi là đối

tượng được chèn vào trước nhất

Trang 2

Hàng đợi

head of queue tail of queue

enqueue dequeue

Trang 3

Hàng đợi, sử dụng mảngKhai báo cấu trúc hàng đợi

Typerdef struct Queue

Trang 4

Hàng đợi, sử dụng mảng

 Thao tác khởi tạo hàng đợi rỗng

int InitQueue(Queue &q, int maxItems)

Trang 5

Hàng đợi, sử dụng mảng

 Thao tác kiểm tra hàng đợi rỗng

int IsEmpty(const Queue q)

Trang 6

Hàng đợi, sử dụng mảng

 Thao tác kiểm tra hàng đợi đầy

int IsFull(const Queue q)

{

if(q numItems == q.max)

return 1; // Queue đầy

return 0; // Queue không đầy

}

Trang 8

Trừu tượng mảng

Trang 9

Trừu tượng mảng

Trang 10

Giải pháp

• Trở lại đầu dãy:

• Yêu cầu:

– front chỉ số đầu hàng đợi

– rear chỉ số cuối hàng đợi

– numItems biến đếm

– array_size chiều dài mảng

enqueue( 10 )

Trang 11

Hàng đợi, sử dụng mảng

int EnQueue(Queue &q, int newItem)

{

if (IsFull(q)) return 0; // Queue đầy, không thêm vào được

q.rear++;

if(q.rear == q.max) // tràn giá

q.rear = 0; // quay trở về đầu mảng

q.arrQueue[q.rear] = newItem; // thêm phần tử vào cuối Queue

if(q.numItems == 0) q.front = 0;

q.numItems++;

return 1; // thêm thành công

}

Trang 12

Hàng đợi, sử dụng mảng

int DeQueue(Queue &q, int &itemout)

{

if (IsEmpty(q)) return 0; // Queue rỗng, không lấy ra được

itemout = q.arrQueue[q.front]; // lấy phần tử đầu ra

q.front++;

q.numItems ;

if(q.front == q.max) // nếu đi hết mảng …

q.front = 0; // … quay trở về đầu mảng

if(q.numItems == 0) q.front = q.rear = -1;

return 1; // xóa thành công

}

Trang 15

• Kiểu Client-server :

– Một hoặc nhiều clients đang yêu cầu được phục vụ từ một hay nhiều servers

– Có thể có nhiều hơn một client đang đợi để được

phục vụ tại cùng thời điểm

– Các clients trong hàng đợi sẽ được phục vụ theo theo thứ tự thời gian chúng được chèn vào

Trang 20

• chèn tất cả con của nó vào hàng đợi

– Trật tự của các phần tử được lấy ra khỏi hàng đợi gọi

là trật tự breadth-first

Trang 21

• Đưa nút gốc A vào

Trang 22

• Lấy A ra và đưa hai con của nó là B và H vào

Trang 23

• Lấy B ra và chèn C, D, và G

Trang 24

• Lấy H ra và đưa I là con của nó vào

Trang 25

• Lấy C ra – C không có con

Trang 26

• Lấy D ra và đưa E và F vào

Trang 27

• Lấy G

Trang 28

• Lấy I và chèn vào J và K

Trang 29

• Lấy E

Trang 30

• Lấy F

Trang 31

• Lấy J

Trang 32

• Lấy K, và khi đó hàng đợi rỗng

Trang 33

• Kết thúc ta có trật tự

A B H C D G I E F J K

là trật tự breadth first:

Ngày đăng: 24/02/2014, 03:20

TỪ KHÓA LIÊN QUAN

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

w