链队列的实质就是只限制在表头做添加,表尾做删除的单链表
一 链队列示意图
注:增加指向链表的队尾指针,便于在表尾做插入操作;其中Q为LinkQueue型的指针。
二 链队列基本运算
[cpp] view plain copy
- //置空队
- void InitQueue(LinkQueue *Q)
- {
- Q->front=Q->rear=NULL;
- }
[cpp] view plain copy
- //判队空
- intQueueEmpty(LinkQueue *Q)
- {
- return Q->front==NULL&&Q->rear==Null;
- //实际上只须判断队头指针是否为空即可
- }
[cpp] view plain copy
- //入队
- void EnQueue(LinkQueue *Q,DataType x)
- {
- QueueNode *p = (QueueNode *)malloc(sizeof(QueueNode));//申请新节点
- p->data = x;
- p->next = NULL;
- if(QueueEmpty(Q))
- Q->front = Q->rear = p;//将x插入到空队列
- else
- {
- //x插入到非空队列的尾
- Q->rear->next = p;//*p链到原队尾节点后
- Q->rear = p;//队尾指针指向性的队尾
- }
- }
[cpp] view plain copy
- //出队
- DataType DeQueue(LinkQueue *Q)
- {
- DataType x;
- QueueNode *p;
- if(QueueEmpty(Q))
- Error("Queue undefflow");//下溢
- p = Q->front;//指向对头结点
- x = p->data;//保存头结点的数据
- Q->front = p->next;//将对头从节点上摘下来
- if(Q->rear=p)//原队中只有一个节点,删去后队列变空此时的头指针已为空
- Q->rear = NULL;
- free(p);
- return x;
- }
转载:http://blog.csdn.net/xsf50717/article/details/39938553
时间: 2024-12-23 09:17:41