竹笋

首页 » 问答 » 常识 » 详解数据结构与算法队列Queue
TUhjnbcbe - 2023/9/23 19:56:00
免费视频网站vip账号和密码 http://www.cgia.cn/news/chuangyi/1579106.html

今天一起说说数据结构:队列。

(一)队列

①介绍

队列是一种特殊的线性表,只能在头尾两端进行操作。

队尾(rear):只能从队尾添加元素,一般焦作enQueue,入队

队头(front):只能从队头移除元素,一般焦作deQueue,出队

先进先出的原则、FirstInFistOut,FIFO(跟栈是反的,栈是后进先出)

左边是添加的,后边是提取出来的。

②生活中的队列

排队买票,排队吃饭等等

③队列的接口设计

intsize();//添加元素

booleanisEmpty();//是否为空

voidenQueue(Eelement);//入队

EdeQueue();//出队

Efront();//获取队列的头元素

voidclear();//清空

想想场景,在排队的时候,都会发一个牌子,或者自发的搞的顺序的编号,是不是可以使用动态数组,链表。优先使用双向链表,因为队列主要是往头尾操作元素。

④代码演示

使用之前专题中说过的,链表的LinkedList来完成队列

enQueue入队,直接按照链表往后添加就可以了。

deQueue出队,就是从头开始出一个一个出,直接remove(0)

front就是队头,直接取第一个元素就可以了。

测试输出结果。

(二)刷题

①用栈实现队列

准备2个栈,inStack,outStack入队时,push到inStack出队时,如果outStack为空格,将inStack所有元素逐一弹出,push到outStack,outStack弹出栈顶元素。如果outStack不会空,outStack弹出栈顶元素。

②假设如下操作:11入队,22入队,出队,33入队,出队。

11入队,22入队,直接放入inStack就可以了。

出队,将inStack里面的22,11放入outStack中,然后在将11弹出。出队肯定是1个元素出队

33入队,直接放入inStack就可以了。

执行出队,因为已经在outStack中了,直接让22出队就可以了

③刷题

直接使用java官方的Stack。这个题目的方法名称跟栈的名称是一样的。用栈的功能来实现队列的功能,不光是出队,还是获取队头元素,都需要先判断outStack是否为空,如果为空,如果为空都需要往outStack里面放,如果不为空,就直接按照队列的放入就可以了。判断是否为空的时候,一定要inStack和outStack都为空才为空。

(三)分析java官方的队列源码

①官方的Queue在java.util中

②源码

是个接口看不到实现,仔细看谁实现了其实是LinkedList

offer就是入队poll就是出队peek获取队头元素

LinkedList实现了Deque

Deque实现了Queue

PS:java底层的Queue,就是通过LikedList来实现的。队列容易理解,反应到现实中,很好理解。

1
查看完整版本: 详解数据结构与算法队列Queue