链队的链式存储结构:
typedef struct QNode{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr front; //队头指针
QueuePtr rear; //队尾指针
}LinkQueue;
(1)链队初始化: Status InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=new QNode; //生成新结点作为头结点,队头和队尾指针指向此结点
Q.front->next=NULL; //头结点的指针域置空
return true;
}
(2)链队入队: Status EnQueue(LinkQueue &Q,QElemType e)
{
QNode *p=new QNode;
p->data=e;
p->next=NULL;
Q.rear->next=p; //将新结点插入到队尾
Q.rear=p; //修改队尾指针
return true;
}
(3)链队出队: Status DeQueue(LinkQueue &Q,QElemType &e)
{
if(Q.front==Q.rear)
{
return false;
}
p=Q.front->next; //p指向队头
e=p->data;//回收站
Q.front->next=p->next; //修改头指针
if(Q.rear==p)
{
Q.rear=Q.front; //最后一个元素被删,队尾指针指向头结点
}
delete p;
return true;
}
(4)取队头元素: QElemType GetHead(LinkQueue Q)
{
if(Q.front!=Q.rear)
{
return Q.front->next->data; //返回对头元素的值
}
}