数据结构论坛

首页 » 分类 » 问答 » 带你认识数据结构链队列
TUhjnbcbe - 2025/1/15 17:06:00
#结构#在本篇文章中,作者将与大家一起了解队列的链式结构,以及链队列的相关特点以及代码实现。

链队列的实现原理其实和之前我们学习过的线性链表是非常相似的,它就是一种特殊的线性链表。

只不过是添加了一个对头指针和一个队尾指针,同时限定了插入和删除元素的位置而已。

那么链队列相比顺序队列来说有什么好处呢?

其实,由于链表的特性,当我们使用链队列时,它一般是不会出现队满的情况的,相对于我们之前花费很多精力去判断队满的顺序队列显然更加方便,而且容量更大。

接下来,我们就来看看如何用代码实现链队列的相关操作:

一,初始化:

#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;

}

本篇文章到此就结束了,欢迎大家

1
查看完整版本: 带你认识数据结构链队列