3.2.2队列的顺序存储实现

 

 队列是一种操作受限的顺序表(只能在队头删除,在队尾插入)。

所以依旧使用静态数组的形式去存储队列。

(1)创建(初始化)

现定于(顺序队列)的结构体

 

 

 初始化队列时:

主函数中声明一个队列:

 那么判断队列是否为空:

(2)入队操作(增):

 把要插入的元素插入到队尾指针指向的位置

然后将队尾指针往后移动一格。

这就完成了一次入队操作。 

那么这里的队列已满的条件是什么呢?

当整个静态数组都被存满之后:

其实是不可以的。

当我们让队头元素依次出列的时候。

rear依旧等于Maxsize

静态数组的前面的位置

是不是空余了 

 

所以我们对原有的入队操作进行修改。

使rear指针重新指向前面空闲的位置

 

 模运算这就实现了将存储空间在逻辑上变成了“环状”

我们将这样实现的队列称为循环队列 

此时我们看到rear上面还有存储空间;

我们就可以进行后移。

此时队列已满的条件:队尾指针的在下一个位置是队头即:(Q.rear+1)%MaxSize==Q.front

也许有人会问,不是还有一个空位置吗。为什么不让front=rear呢?
我们记得判断队空的条件是:front=rear(会混淆)

所以代价就是牺牲一个存储单元。

循环队列的出队操作:(从front出来)

 

 

rear=front的时候,就是队列已经为空了(return false)

(4)查找

 

 

方案一:判断队列已满/已空

 那么如何对队列元素的个数:

方案二:
我们在结构体中再定义一个size

 

 

方案三(同时满足两个条件)

 

一定要注意审题:(队尾指针是指向什么位置)

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值