5. Danh sách hạn chế
5.1.2. Các thao tác trên hàng đợi tổ chức bằng danh sách đặc
a. Khởi tạo hàng đợi (Initialize)
b. Thêm 1 phần tử vào hàng đợi (Add)
c. Lấy nội dung 1 phần tử trong hàng đợi ra xử lý (Get) d. Hủy hàng đợi
5.1. Hàng đợi (tt)
5.1.2.a. Khởi tạo hàng đợi (tổ chức bằng danh sách đặc)
B1: CQList.Len = Length
B2: CQList.List = new T[Length] B3: IF(CQList.List == NULL)
Thực hiện BKT
B4: CQList.Front = CQList.Rear = 0 BKT: Kết thúc
87
5.1. Hàng đợi (tt)
5.1.2.a. Khởi tạo hàng đợi (tổ chức bằng danh sách đặc)
Cài đặt thuật toán
T * CQInitialize (CQUEUE & QList, int Length) {
QList.Len = Length;
QList.List = new T[Length]; if (QList.List == NULL)
return (NULL);
QList.Front = QList.Rear =-1; return (QList.List);
88
5.1. Hàng đợi (tt)
5.1.2.b. Thêm 1 phần tử vào hàng đợi (tổ chức bằng danh sách
đặc)
Thuật toán
// nếu hàng đợi đã bị đầy
B1: IF(CQList.Front ==1 AND CQList.Rear == CQList.Len) Thực hiện BKT
B2: IF(CQList.Rear+1 == CQList.Front) Thực hiện BKT
B3: IF(CQList.Front = 0) // nếu hàng đợi rỗng CQList.Front = 1 B4: IF(CQList.Rear = CQList.Len) CQList.Rear = 1 B5: ELSE CQList.Rear ++ B6: CQList.List[CQList.Rear] = NewData BKT: Kết thúc
89
5.1. Hàng đợi (tt)
5.1.2.b. Thêm 1 phần tử vào hàng đợi (tổ chức bằng danh sách
đặc)
Cài đặt thuật toán
int CQAdd(CQUEUE & QList, T NewData)
{ if (QList.Front == 0 && QList.Rear == QList.Len -1) return (-1); if (QList.Rear +1 == QList.Front) return (-1); if (QList.Front == -1) QList.Front =0 if (QList.Rear == QList.Len) QList.Rear = 0; else QList.Rear += 1; QList.List[QList.Rear] = NewData return (QList.Rear ); }
5.1. Hàng đợi (tt)
5.1.2.c. Lấy nội dung 1 phần tử trong hàng đợi ra xử lý (tổ chức bằng danh sách đặc) B1: IF (CQList.Front = 0) Thực hiện BKT B2: Data = CQList.List[CQList.Front] B3: IF(CQList.Rear == CQList.Front) B3.1: CQList.Rear = CQList.Front = 0 B3.2: Thực hiện BKT B4: IF (CQList.Front = CQList.Len) CQList.Front = 1 B5: ELSE CQList.Front++ BKT: Kết thúc
91
5.1. Hàng đợi (tt)
5.1.2.c. Lấy nội dung 1 phần tử trong hàng đợi ra xử lý (tổ chức bằng danh sách đặc)
Cài đặt thuật toán
int CQGet(CQUEUE & QList, T &Data) { if (QList.Front == -1) return (-1); Data = QList.List[QList.Front]; if (QList.Front == QList.Rear) { QList.Front = QList.Rear = -1; return (1); } if (QList.Front == QList.Len -1) QList.Front = 0; else QList.Front += 1; return (1); }
5.1. Hàng đợi (tt)
5.1.2.d. Hủy hàng đợi (tổ chức bằng danh sách đặc)
Hủy bộ nhớ cấp phát cho hàng đợi void CQDelete(CQUEUE & QList) {
delete QList.List; return;
93
5.1. Hàng đợi (tt)