队列的链式存储
队列的链式表示称为链队列,它实际上是一个同时带有队头指针和队尾指针的单链表。头指针指向队头结点,尾指针指向队尾结点,即单链表的最后一个结点(注意与顺序存储不同)。
队列的链式存储类型:
typedef struct LinkNode {
ElemType data;
LinkNode* next;
}LinkNode;
typedef struct {
LinkNode* front;
LinkNode* rear;
}LinkQueue;
初始化:
void InitQueue(LinkQueue& Q) {
Q.front = Q.rear = new LinkNode;
Q.front->next = NULL;
}
判空操作:
bool QueueEmpty(LinkQueue Q) {
if (Q.front == Q.rear) {
return true;
}
else {
return false;
}
}
入队:
void EnQueue(LinkQueue& Q, ElemType x) {
LinkNode* s = new LinkNode;
s->data = x;
s->next = NULL;
Q.rear->next = s;
Q.rear = s;
}
出队:
bool DeQueue(LinkQueue& Q, ElemType& x) {
if (Q.front == Q.rear) {//空队
return false;
}
LinkNode* p = Q.front->next;
x = p->data;
Q.front->next = p->next;
if (Q.rear == p) {
Q.front = Q.rear;
}
free(p);
return true;
}
取队头元素:
ElemType GetTop(LinkQueue Q) {
if (Q.front != Q.rear) {
return Q.front->next->data;
}
return false;
}