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 1HÀNG ĐỢI
QUEUE
Trang 23.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 33.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 43.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 63.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 9Mảng lưu trữ hàng đợi
Trang 10Cá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 11Cá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 14Biểu diễn hàng đợi đầy
9
Trang 16Mảng lưu trữ hàng đợi
Chèn phần tử x vào cuối hàng đợi
X
9
Trang 17Mảng lưu trữ hàng đợi
Chèn phần tử x vào cuối hàng đợi
9
Trang 18Cá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 19Mảng lưu trữ hàng đợi
Loại phần tử ở đầu hàng đợi gán cho x
8
x
Trang 21Cá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 22Nhậ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 23Hà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 26Cá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 27Cá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 30Cá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 31Cá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 32Nhậ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 33Hà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 352 3 4
5
0
6
A B
C
front =2
Trang 36Cá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 37Cá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 40Cá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 41Cá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 42Nhậ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 433.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 47Cá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 48Cá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 50Cá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 51Cá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 52Bà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