用单链表的基本操作实现链队列的9个基本操作
typedef ElemType QElemType;
#define LNode QNode
#define LinkList QueuePtr
void InitQueue(LinkQueue &Q){
InitList(Q.front);//以Q.front为头指针,构造空链表
Q.rear = Q.front;//Q.rear和Q.front共同指向链队列的头结点
}
void DestroyQueue(LinkQueue &Q){
DestroyList(Q.front);//销毁Q.front为头指针的链表,且置Q.front为空
Q.rear = Q.front;//置Q.front也为空
}
void ClearQueue(LinkQueue &Q){
ClearList(Q.front);//清空以Q.front为头指针的链表,头指针的指针域为空
Q.rear = Q.front;//Q.rear也指向空队列的头结点
}
Status QueueEmpty(LinkQueue Q){
return ListEmpty(Q.front);
}
int QueueLength(LinkQueue Q){
return ListLength(Q.front);
}
Status GetHead(LinkQueue Q, QElemType &e){
return GetElem(Q.front, 1, e);
}
void EnQueue(LinkQueue &Q, QElemType e){
ListInsert(Q.front, ListLength(Q.front) + 1, e);
}
Status DeQueue(LinkQueue &Q, QElemType &e){
if (Q.front->next == Q.rear)
Q.rear = Q.front;
return ListDelete(Q.front, 1, e);
}
void ListTraverse(LinkQueue Q, void(*visit)(ElemType&)){
ListTraverse(Q.front, visit);
}