链队列

链队列的实质就是只限制在表头做添加,表尾做删除的单链表

一 链队列示意图

链队列_第1张图片

注:增加指向链表的队尾指针,便于在表尾做插入操作;其中Q为LinkQueue型的指针。

二 链队列基本运算

 //置空队
      void InitQueue(LinkQueue *Q)
      {
            Q->front=Q->rear=NULL;
      }

 //判队空
      intQueueEmpty(LinkQueue *Q)
      {
            return Q->front==NULL&&Q->rear==Null;
            //实际上只须判断队头指针是否为空即可
      }
//入队
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;//队尾指针指向性的队尾
	}
}
//出队
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;

}




你可能感兴趣的:(链队列)