链队列的实现原理其实和之前我们学习过的线性链表是非常相似的,它就是一种特殊的线性链表。
只不过是添加了一个对头指针和一个队尾指针,同时限定了插入和删除元素的位置而已。
那么链队列相比顺序队列来说有什么好处呢?
其实,由于链表的特性,当我们使用链队列时,它一般是不会出现队满的情况的,相对于我们之前花费很多精力去判断队满的顺序队列显然更加方便,而且容量更大。
接下来,我们就来看看如何用代码实现链队列的相关操作:
一,初始化:
#includestdio.h
#includestdbool.h
#includemalloc.h
typedefstructLinkNode{
intdata;
structLinkNode*next;
}LinkNode;//链表的结构体
typedefstruct{
LinkNode*front,*rear;
}LinkQueue;//队列的结构体
voidInitQueue(LinkQueueq){
q.front=q.rear=(LinkNode*)malloc(sizeof(LinkNode));//将头尾指针指向一个新申请的内存空间
q.front-next=NULL;//将头指针的next指向NULL
}
二,入队:
voidEnQueue(LinkQueueq,inte){
LinkNode*s=(LinkNode*)malloc((sizeof(LinkNode)));
s-data=e;
s-next=NULL;
q.rear-next=s;//将rear的下一个元素变为s
q.rear=s; //将rear指向s
}
三,出队:
boolDeQueue(LinkQueueq,inte){
if(q.front==q.rear){
returnfalse;
//TODO
}//若队列为空,则无法出队
LinkNode*p=q.front-next;
e=p-data;
q.front-next=p-next;
if(q.rear==p){
q.rear=q.front;
//TODO
}//队空,此时是最后一个结点出队
free(p);
returntrue;
}
本篇文章到此就结束了,欢迎大家