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

BÀI GIẢNG: HÀNG ĐỢI pps

52 528 3
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

Định dạng
Số trang 52
Dung lượng 253 KB

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

Nội dung

 Phép toán bổ sung một phần tử vào hàng đợi được thực hiện ở một đầu gọi là cuối hàng.. Phép toán loại bỏ một phần tử khỏi hàng đợi được thực hiện ở đầu kia gọi là đầu hàng... 3.5.2 Lưu

Trang 1

HÀNG ĐỢI

QUEUE

Trang 2

3.5 CẤU TRÚC HÀNG ĐỢI

 Khái niệm, đặc điểm

 Lưu trữ kế tiếp của hàng đợi

 Hàng đợi móc nối

Trang 3

3.5.1 Khái niệm, đặc điểm của hàng đợi

Khái niệm

 Hàng đợi là một danh sách tuyến tính

 Phép toán bổ sung một phần tử vào hàng đợi được thực hiện ở một đầu gọi là cuối hàng Phép toán loại bỏ một phần tử khỏi hàng đợi được thực hiện ở đầu kia gọi là đầu hàng

Trang 4

3.5.1 Khái niệm, đặc điểm của hàng đợi

 Phần tử đưa vào hàng đợi trước sẽ được lấy ra xử lí trước, phần tử đưa vào hàng đợi sau sẽ được lấy ra xử

lí sau

 Được gọi là danh sách FIFO (First - In - First – Out)

Trang 6

3.5.2 Lưu trữ kế tiếp của hàng đợi

 Định nghĩa và khai báo cấu trúc dữ liệu

 Định nghĩa các phép toán và chương trình thực hiện các phép toán cơ bản

Trang 7

Định nghĩa và khai báo cấu trúc dữ liệu

 Hàng đợi được biểu diễn là một bản ghi gồm

có 3 trường :

 Trường thứ nhất : là mảng một chiều có kích thước đủ lớn để lưu các phần tử của hàng đợi

 Trường thứ hai và thứ ba là số nguyên để lưu chỉ số của phần tử đầu hàng đợi và chỉ số của phần tử cuối hàng đợi trong mảng các phần tử

Trang 8

Định nghĩa và khai báo cấu trúc dữ liệu

 Khai báo cấu trúc :

const max = <1 số thích hợp>;

struct queue { <kiểu phần tử> ptu[max] ; int front, rear ;

} q ;

Trang 9

Mảng lưu trữ hàng đợi

Trang 10

Các phép toán cơ bản

Khởi tạo hàng đợi rỗng : creat(q)

Kiểm tra hàng đợi rỗng : empty(q)

Kiểm tra hàng đợi đầy : full(q)

Chèn phần tử x vào cuối hàng đợi : add(x,q)

Loại phần tử đầu hàng đợi gán cho x : del(q,x)

Trang 11

Các phép toán cơ bản

 Khởi tạo hàng đợi rỗng

void creat(queue &q)

{ q.front = 0;

q.rear = -1;

}

Trang 14

Biểu diễn hàng đợi đầy

9

Trang 16

Mảng lưu trữ hàng đợi

Chèn phần tử x vào cuối hàng đợi

X

9

Trang 17

Mảng lưu trữ hàng đợi

Chèn phần tử x vào cuối hàng đợi

9

Trang 18

Các phép toán cơ bản

Chèn phần tử x vào cuối hàng đợi

void add(<kiểu phần tử> x, queue &q)

{

if (!full(q)) q.ptu[++q.rear]=x;

}

Trang 19

Mảng lưu trữ hàng đợi

Loại phần tử ở đầu hàng đợi gán cho x

8

x

Trang 21

Các phép toán cơ bản

 Loại phần tử ở đầu hàng đợi gán cho x

void del(queue &q , <kiểu phần tử> &x)

{

if (!empty(q)) x= q.ptu[q.front++]; }

Trang 22

Nhận xét

 Chưa tận dụng được không gian nhớ rỗi của hàng đợi

 Hàng đợi đầy nhưng có thể trong hàng đợi không có phần tử

Trang 23

Hàng đợi cải tiến

 Hàng đợi cải tiến được biểu diễn là một bản ghi gồm có 2 trường :

 Trường thứ nhất : là mảng một chiều có kích thước

đủ lớn để lưu các phần tử của hàng đợi

 Trường thứ hai là số nguyên dùng để lưu chỉ số phần tử cuối hàng đợi trong mảng các phần tử

Mặc định phần tử đầu hàng đợi (nếu có) ở vị trí 0

Trang 24

Định nghĩa và khai báo cấu trúc dữ liệu

 Khai báo cấu trúc :

const max = <1 số thích hợp>;

struct queue { <kiểu phần tử> ptu[max] ; int rear;

} q ;

Trang 26

Các phép toán cơ bản

Khởi tạo hàng đợi rỗng : creat(q)

Kiểm tra hàng đợi rỗng : empty(q)

Kiểm tra hàng đợi đầy : full(q)

Chèn phần tử x vào cuối hàng đợi : add(x,q)

Loại phần tử đầu hàng đợi gán cho x : del(q,x)

Trang 27

Các phép toán cơ bản

 Khởi tạo hàng đợi rỗng

void creat(queue &q)

{

q.rear = -1;

}

Trang 30

Các phép toán cơ bản

Chèn phần tử x vào cuối hàng đợi

void add(<kiểu phần tử> x, queue &q)

{

if (!full(q)) q.ptu[++q.rear]=x;

}

Trang 31

Các phép toán cơ bản

 Loại phần tử ở đầu hàng đợi gán cho x

void del(queue &q , <kiểu phần tử> &x)

{ if (!empty(q))

{ x= q.ptu[0] ; for (int i=0;i<q.rear;i++)

q.ptu[i]=q.ptu[i+1];

q.rear ;

} }

Trang 32

Nhận xét

 Tận dụng được không gian nhớ của hàng đợi Hàng đợi

đầy khi số phần tử có trong hàng đợi là max

 Phép toán loại phần tử đầu hàng đợi gán cho x có độ phức tạp là O(n)

Trang 33

Hàng đợi mảng vòng

 Coi không gian nhớ dành cho hàng đợi là mảng vòng

 Hàng đợi mảng vòng được biểu diễn là một bản ghi gồm

có 3 trường :

 Trường thứ nhất : là mảng một chiều có kích thước

đủ lớn để lưu các phần tử của hàng đợi

 Trường thứ hai và thứ ba là số nguyên dùng để lưu chỉ số phần tử đầu hàng đợi và chỉ số phần tử cuối hàng đợi trong mảng các phần tử

Trang 34

Định nghĩa và khai báo cấu trúc dữ liệu

 Khai báo cấu trúc :

const max = <1 số thích hợp>;

struct queue { <kiểu phần tử> ptu[max] ; int front, rear ;

} q ;

Trang 35

2 3 4

5

0

6

A B

C

front =2

Trang 36

Các phép toán cơ bản

Khởi tạo hàng đợi rỗng : creat(q)

Kiểm tra hàng đợi rỗng : empty(q)

Kiểm tra hàng đợi đầy : full(q)

Chèn phần tử x vào cuối hàng đợi : add(x,q)

Loại phần tử đầu hàng đợi gán cho x : del(q,x)

Trang 37

Các phép toán cơ bản

 Khởi tạo hàng đợi rỗng

void creat(queue &q)

{

q.rear = -1; q.front = 0;

}

Trang 40

Các phép toán cơ bản

Chèn phần tử x vào cuối hàng đợi

void add(<kiểu phần tử> x, queue &q)

Trang 41

Các phép toán cơ bản

 Loại phần tử ở đầu hàng đợi gán cho x

void del(queue &q , <kiểu phần tử> &x)

}

Trang 42

Nhận xét

 Tận dụng được không gian nhớ của hàng đợi Hàng đợi

đầy khi số phần tử có trong hàng đợi là max

 Phép toán loại phần tử đầu hàng đợi gán cho x có độ phức tạp là O(1)

Trang 43

3.5.3 Lưu trữ móc nối của hàng đợi

 Định nghĩa và khai báo cấu trúc dữ liệu

 Định nghĩa các phép toán và chương trình thực hiện các phép toán cơ bản

Trang 44

Định nghĩa và khai báo cấu trúc dữ liệu

 Mỗi phần tử của hàng đợi móc nối là một bản ghi gồm

có 2 trường

data chứa thông tin của phần tử

next là một con trỏ,trỏ vào nút đứng sau trong hàng

đợi

data next

Trang 45

Định nghĩa và khai báo cấu trúc dữ liệu

 Hàng đợi được định nghĩa là một bản ghi gồm 2 con trỏ trỏ vào phần tử đầu hàng và phần tử cuối hàng

Con trỏ next của phần tử cuối hàng đợi nhận giá trị NULL báo hiệu kết thúc hàng đợi

Trang 46

Định nghĩa và khai báo cấu trúc dữ liệu

 Khai báo cấu trúc :

Trang 47

Các phép toán cơ bản

Khởi tạo hàng đợi rỗng : creat(q)

Kiểm tra hàng đợi rỗng : empty(q)

Chèn phần tử x vào cuối hàng đợi : add(x,q)

Loại phần tử đầu hàng đợi gán cho x : del(q,x)

Trang 48

Các phép toán cơ bản

 Khởi tạo hàng đợi rỗng

void creat(queue &q)

{

q.front = NULL;

}

Trang 50

Các phép toán cơ bản

Chèn phần tử x vào cuối hàng đợi

void add(<kiểu phần tử> x, queue &q)

{ node *p=new node;

Trang 51

Các phép toán cơ bản

 Loại phần tử ở đầu hàng đợi gán cho x

void del(queue &q , <kiểu phần tử> &x)

Trang 52

Bài tập áp dụng

 Viết các hàm thực hiện các yêu cầu :

 Nhập hàng đợi mảng vòng, hàng đợi móc nối đơn lưu các phần tử là các sinh viên

 Chèn thêm sinh viên vào cuối hàng đợi

 Loại sinh viên ở đầu hàng đợi

 Hiện thông tin của các sinh viên trong hàng đợi

Ngày đăng: 12/07/2014, 14:20

HÌNH ẢNH LIÊN QUAN

Hình vẽ biểu diễn hàng đợi - BÀI GIẢNG: HÀNG ĐỢI pps
Hình v ẽ biểu diễn hàng đợi (Trang 5)

TỪ KHÓA LIÊN QUAN

w