快速搞懂数据结构之链式队列

什么是链式队列?

本篇仅用于记录自己所学知识及应用,代码仍可优化,仅供参考,如果发现有错误的地方,尽管留言于我,谢谢!

队列有两种存储形式:顺序存储和链式存储。
采用顺序队列存储的队列称为顺序队列。
顺序队列采用数组存储队列中的元素,使用两个指针尾指针(rear)和头指针(front)分别指向队列的队头和队尾。使用顺序队列由于在操作时会出现“假溢出现象”,所以可以使用顺序循环队列合理的使用队列空间。
顺序队列的实现可以参考 快速搞懂数据结构之顺序队列
采用链式存储的队列称为链式队列。
链式队列使用链表来实现,链表中的数据域用来存放队列中的元素,指针域用来存放队列中下一个元素的地址,同时使用队头指针和队尾指针指向队列的第一个元素和最后一个元素。
插入操作在队尾进行,删除操作在队头进行,由队头指针和队尾指针控制队列的操作。
链式队列的出队和入队的操作可参考下图:

 链式队列的出队入队操作

创建链式队列必须的节点

// 链式队列存储的元素类型,默认是int
typedef  int  data_t;  
   // 链式队列节点
typedef  struct  node_t
{
      data_t data ;		
   struct node_t   *next; 	
 } linknode_t,  *linklist_t; 
  // 链式队列的管理结构体                
 typedef  struct
  {
     linklist_t  front,  rear; 
  } linkqueue_t; 	

关键操作函数

链式队列存储示意图:
 链式队列图

创建空队列 :

空队列示意图:
空队列

linkqueue_t  *CreateQueue()
{
    
      linkqueue_t  *lq  =  (linkqueue_t  *)malloc(sizeof(linkqueue_t));
      lq->front = lq->rear = (linklist_t)malloc(sizeof(linknode_t));
      lq->front->next = NULL ;	  /*置空队*/
          return  lq;     /*返回队列指针*/
}

判断队列空 :

int   EmptyQueue(linkqueue_t  *lq)  {
    
   return ( lq->front  = =  lq->rear) ;
} 

入队

入队

void  EnQueue (linkqueue_t *lq, data_t x)
{
   
      lq->rear->next = (linklist_t)malloc(sizeof(linknode_t)) ; 
      lq->rear = lq->rear->next; 	  /*修改队尾指针*/
      lq->rear->da
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值