队列的顺序存储(数组)和链式存储(链表)C语言实现

前一篇 堆栈的顺序存储和链式存储

------

多个数据组成一个有序序列,只能在一端插入,在另一端删除,这样的数据组织方式就叫做队列。又被称为"先进先出表"(FIFO)。

顺序存储:

首先来看用数组实现,分别用两个变量Front和Rear来表示队列的头和尾,一开始都初始化为-1。当有元素入队时(插入数组尾中)Rear向数组尾移动一。当有元素出队时,Front向右移动一,然后将元素移除。

当数组固定了大小的时候,随着元素的添加和删除,当Rear到达数组的末端时,无法再添加元素,但是Front不在数组头,前面还有很多位置,这就造成了假溢出现象,所以我们一般把队列(数组)的头尾相连,组成循环队列,这样就可以避免这样的情况出现。

如何判定队列为空呢?Front等于Rear;

如何判定队列满了呢?Rear(添加一个元素)往后移动一到了Front的位置,此时是队列满的状态,但是这和队列空的判定冲突了。

这是为什么呢?因为我们是用Front和Rear两者之间的位置来表示队列的状态的,这两者之间的位置差距只有n(数组的大小)种情况,但是队列的状态有n+1中(0,1,2...n)。

所以我们有两种方法:

一是多加一个变量,记录当前队列中元素个数,或者是最后一次操作,依次来区分队列空和满的状态。

二是少用一个位置,当Rear+1 == Front

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值