数据结构——队列

队列的定义:插入操作(入队)在一端,删除操作(出队)在另一端的线性表。

其中,入队方向为队尾,出队方向为队头。

基于队列的操作共有6种:初始化空队列,释放队列所占用的存储空间,出队操作,入队操作,取队头元素,判空操作。

存储结构也和线性表一样,分为顺序存储和链接存储。

①顺序存储:循环队列的产生过程

由线性表在数组中的存储方式类比到队列在数组中的存储方式,将队头元素固定在数组下标为0处,但是队尾不固定,所以需要队尾指针指向队尾元素来完成入队操作,但是这样进行出队操作时,会带来大量的数据元素的移动,所以把队头元素移动,这样就需要一个队头指针。(约定队头指针指向队头元素的前一个位置)。随着插入操作与删除操作的进行,队列会向数组下标最大值单方向移动,导致“假溢出”(将元素插入到数组下标最大值时,无法在进行插入)。所以将数组的首尾相接,变成循环结构。产生了循环队列。接着在判空操作与判满操作时,两者的判定条件一样,front==rear,所以在判满时,认为数组有一个空闲单元即为队满状态。注意(循环+1即:(rear+1)%QueueSize)

②链接存储:链队列的头结点优点

链队列为了处理空链队列和非空链队列的操作语句一致,加上了头结点。

主要是针对入队操作:

当不加头结点时,空链队列front=rear=NULL

处理加上头结点的链队列和不加头结点的非空链队列语句:

s=new Node;s - >data=x;

s - >next=rear - >next;

rear -> next=s;

rear=s;

此时没有头结点的空链队列,rear=NULL,它的rear -> next没有意义

总结:在队列元素变化较大时,使用链队列

在队列元素变化较小时,使用循环队列

两个循环队列不能同时共享一个数组空间。

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值