队列的链式存储结构及实现

1 链队列:队列的链式存储结构,线性表的单链表,尾进头出。
2 采用带 头结点的链表。front->头结点,头结点不存任何数据,所以出队时是出队头(头结点后的第一个节点)。
3 空队列时,front和rear都指向头结点。
链队列的结构为:

typedef int QElemType;/*这里假设QElemType的类型为 int*/

typedef struct QNode /*结点结构*/
{
	QElemType  data;
	struct QNode *next;
}QNode,*	QueuePtr;

typedef struct   /*队列的链表结构*/
{
	QueuePtr front,rear;/*队头,队尾指针*/
}LinkQueue;

入队操作,链表尾部插入结点:

/*插入元素e为Q的新队尾元素*/
Status EnyQueue(LinkQueue *Q,QElemType e)
{
	QueuePtr s=(QueuePtr)malloc(sizeof(QNode);
	if(!s)  /*存储分配失败*/
		exit(OVERFLOW);
	s->data=e;
	s->next=NULL;
	Q->rear->next=s;/*把拥有元素e的新结点s赋值给原队尾结点的后继*/
	Q->rear=s;/*把当前的s结点设置为队尾结点,rear指向s*/
    return OK;
}

出队操作,头结点的后继结点出队

/*若列队不空,删除Q的队头元素,用e返回其值,并返回OK,否则返回ERROR*/
Status DeQueue(LinkQueue *Q,QElemtype *e)
{
	if(	Q->front==Q->rear)
	 return ERROR;
	 p= Q->front->next;/*将欲删除的队头结点暂给p*/
	 *e=p->data;/*将欲删除的队头结点的值赋值给e*/
	 Q->front->next=p->next;/*将原队头结点后继p->next赋值给头结点后继*/
	 if(Q->rear==p)/*若队头是队尾,则删除后将rear指向头结点*/
	 	Q->rear=Q->front;
	 free(p);
	 return OK;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值