//Thao tác QueueFront: Kiểm tra phần tử ở ñầu Queue int QueueFrontconst QUEUE &q, int& itemout { if IsEmptyq return 0; // Queue rỗng, không kiểm tra // lấy phần tử ñầu ra itemout = q.QAr
Trang 1//Thao tác DeQueue: lấy ra 1 phần tử ở ñầu Queue
int DeQueue(QUEUE &q, int& itemout) {
if (IsEmpty(q))
return 0; // Queue rỗng, không lấy ra ñược itemout = q.QArray[q.QFront]; // lấy phần tử ñầu ra
q.QFront++;
q.QNumItems ;
if (q.QFront==q.QMax) // nếu ñi hết mảng …
q.QFront = 0; // … quay trở về ñầu mảng
if (q.QNumItems==0) // nếu lấy ra phần tử cuối cùng
q.QFront = q.QRear = -1; // khởi tạo lại Queue return 1; // Lấy ra thành công
}
This is trial version www.adultpdf.com
Trang 2//Thao tác QueueFront: Kiểm tra phần tử ở ñầu Queue
int QueueFront(const QUEUE &q, int& itemout) {
if (IsEmpty(q))
return 0; // Queue rỗng, không kiểm tra
// lấy phần tử ñầu ra
itemout = q.QArray[q.QFront];
return 1;
}
//Thao tác QueueRear: Kiểm tra phần tử ở cuối Queue
int QueueRear(const QUEUE &q, int& itemout) {
if (IsEmpty(q))
return 0; // Queue rỗng, không kiểm tra
// lấy phần tử cuối ra
itemout = q.QArray[q.QRear];
return 1;
}
This is trial version www.adultpdf.com
Trang 3//Khai báo cấu trúc
typedef struct tagNODE
{
int data;
tagNODE* pNext;
} NODE, *PNODE;
typedef struct tagQUEUE
{
int NumItems;
PNODE pFront, pRear;
} QUEUE;
Hàng ñợi sử dụng DSLK
This is trial version www.adultpdf.com
Trang 4Các thao tác cơ bản
int InitQueue(QUEUE& q);
int IsEmpty(const QUEUE& q);
int IsFull(const QUEUE& q);
int EnQueue(QUEUE &q, int newitem);
int DeQueue(QUEUE &q, int& itemout);
int QueueFront(const QUEUE &q, int& itemout);
int QueueRear(const QUEUE &q, int& itemout);
This is trial version www.adultpdf.com
Trang 5//Khởi tạo Queue rỗng
int InitQueue(QUEUE& q)
{
q.NumItems = 0;
q.pFront = q.pRear = NULL;
return 1;
}
This is trial version www.adultpdf.com
Trang 6//Kiểm tra Queue rỗng
int IsEmpty(const QUEUE& q)
{
return (q.NumItems==0);
}
//Kiểm tra Queue ñầy
int IsFull(const QUEUE& q)
{
PNODE tmp = new NODE;
if (tmp==NULL) return 1;
delete tmp;
return 0;
}
This is trial version www.adultpdf.com
Trang 7//Thêm 1 phần tử vào cuối Queue
int EnQueue(QUEUE &q, int newitem)
{
if (IsFull(q)==1)
return 0;
PNODE p = new NODE;
p->data = newitem;
p->pNext = NULL;
if (q.pFront==NULL && q.pRear==NULL)
q.pFront = q.pRear = p;
else {
q.pRear->pNext = p;
q.pRear = p;
} q.NumItems++;
return 1;
}
This is trial version www.adultpdf.com
Trang 8//Lấy ra 1 phần tử ở ñầu Queue
int DeQueue(QUEUE &q, int& itemout)
{
if (IsEmpty(q)==1) return 0;
PNODE p = q.pFront;
q.pFront = p->pNext;
itemout = p->data;
q.NumItems ;
delete p;
if (q.NumItems==0) InitQueue(q);
return 1;
}
This is trial version www.adultpdf.com
Trang 9//Kiểm tra 1 phần tử ở ñầu Queue
int QueueFront(const QUEUE &q, int& itemout)
{
if (IsEmpty(q)==1) return 0;
itemout = q.pFront->data;
return 1;
}
//Kiểm tra 1 phần tử ở cuối Queue
int QueueRear(const QUEUE &q, int& itemout)
{
if (IsEmpty(q)==1) return 0;
itemout = q.pRear->data;
return 1;
}
This is trial version www.adultpdf.com