如何自己实现一个队列

本文介绍了队列作为一种先进先出的数据结构,探讨了其基本操作和实现考虑,特别是如何高效地处理入队和出队,以及如何判断队列的空和满状态。通过静态数组实现了一个循环队列,避免了数据搬移,同时解决了队空和队满的判断问题。
摘要由CSDN通过智能技术生成

前言

队列是一种先进先出的数据结构,也是常见的数据结构之一。日常生活中的排队买东西就是一种典型的队列,而在购票系统也需要一个队列处理用户的购票请求,当然这里的队列就复杂多了。本文介绍队列的基本概念和实现。

队列常见操作

队列最常见的操作是入队和出队,拿排队买东西来说,入队就是新来一个人排在队伍后面,而出队就是一个人已经结账离开。

队列基本实现考虑

与实现栈不同,它需要两个指针,一个指向队头(front),一个指向队尾(rear),这样才能方便地进行入队或出队操作,因此队列的实现要比栈难一些。在说明如何实现一个队列之前,先看实现一个队列可能需要注意哪些问题。

假如我们使用数组按照实现栈的方式来实现队列。并且队列中的数据如下:

0 1 2 3 4
10 11 12 13 14
front


rear

这个时候从队头front处删除一个数据,是很容易的。

0 1 2 3 4

11 12 13 14

front

rear

但是如果要入队一个数据呢?这个时候发现队尾已经没有空间了,为了入队一个元素,必须将所有元素都往队头移动,这似乎很符合我们排队的习惯,前面一个人走了,后面的人都往前一个位置。但是在数组中,将所有的元素都往队头移动的开销是不容忽略的!

有人可能已经注意到了,原来删除的地方还有一个空位呢,不如把新的元素加入到这里,然后将尾指针rear指向该处即可。没错,这就相当于把该数组当成了一个循环数组,即可以看成数组尾部和头部是连着的。这个时候就变成了下面的情况:

0 1 2 3 4
15 11 12 13 14
rear front


此时,队列是满的,rear指向下标0处,而front指向下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值