队列的链式存储结构
typedef struct QNode
{
QElemType data;
struct QNode *next;
}QNode, *QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
初始化
Status InitQueue(LinkQueue *Q)
{
//有头结点!意味着头结点的下一位才是第一个元素
Q->front = Q->rear = new QNode;
Q->front = NULL;
return OK;
}
入队
Status EnQueue(LinkQueue *Q, QElemType e)
{
p = new QNode;
p->data = e;
p->next = NULL;
Q->rear->next = p;
Q->rear = p;
return OK;
}
出队
Status DeQueue(LinkQueue *Q, QElemType *e)
{
//front永远不会变,一直指向头结点
if(!Q->front==Q->rear)
return ERROR;
p = Q->front->next;
*e = p->data;
Q->front->next = p->next;
//关键情况,队列中只有一个元素的时候,如果直接删除该元素,会导致rear丢失
if(Q->rear==p)
Q->rear = Q->front;
delete p;
return OK;
}