【数据结构】队列

本文介绍了队列作为数据结构的基本概念,包括其先进先出的特点,并通过举例说明了队列与日常生活中的排队类似。队列的实现可以使用链表,如LinkedList,以及单链表实现队列的方法。此外,文章还探讨了如何使用循环队列解决空间利用率问题,包括计数方法和浪费空间法来判断队列是否已满,并提供了相关代码示例。
摘要由CSDN通过智能技术生成

1.啥是队列

2.队列实现

3.Queue接口的介绍以及队列的使用

4.相关队列的例子

(1)啥是队列

我们之前讲解了栈,栈和队列是有点区别的

我们说过栈是一种先进后出的数据结构,你可以把它想象成羽毛球筒;然而队列属于一种先进先出的数据结构,队列嘛,就跟你排队做核酸排队打饭一样咯,你先排,你就先桶嗓子眼,你先排你就先打到饭(当然是不能有插队的情况啦~队列中也没有插队的概念,不会说在中间位置插入元素)

 上图就是你每次去食堂打饭的样子,元素从队尾进,从队首出~~~


(2)队列的实现

队列的底层是一个链表,用节点来连接,LinkedLIst实现了Queue接口,因此可以使用Linkedlist来实现一个队列

队列分为:普通队列,双端队列(Deque),优先级队列(堆)

由于堆是之后会介绍的一种数据结构,这里我们就来说说普通队列和双端队列

普通队列就是排队咯,它只有一个方向,遵循先进先出的特点,而双端队列是有两个方向的,你可以同不同的方向进,但你然需要遵循先进先出的特点,简单来说:普通队列是单行道,双端队列是双行道~

 上图展示了双链表的强大之处,使用双链表我们可以实现普通队列,实现双端队列,还可以实现栈~

当然,双链表这么牛逼,使用来实现一个队列岂不是小菜一碟~所以我们提升一下难度,我们不用双链表实现队列,我们改用单链表来实现队列!!!!!


我们知道单链表的形式,可以头插尾插,然后还有一个头节点head(这不是虚拟头节点,而是代表第一个元素~)

接下来我们看看怎么使用一个单链表来实现队列,这里我们理想的方式是使队列的入队和出队操作的时间复杂度都分别达到O(1)(遵循先进先出的规则)

1.头插法入队,删除尾巴节点出队(先进先出)——头插的时间复杂度是O(1),我们有一个头节点head,因此不需要遍历,可以直接头插插入,因此我们使用头插入队;然后我们删除尾巴节点来出队,我们想要删除尾巴节点来实现出队,这样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值