【数据结构五】队列和Queue详解

365best官网 admin 2025-08-19 18:22:28

队列 队列 :只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为 队尾( Tail/Rear ) 出队列:进行删除操作的一端称为队头( Head/Front )

1.模拟实现一个队列 队列中存储结构需要用到空间类型的数据结构,这里我们回顾一下什么是数据结构,数据结构研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,其中物理结构即顺序结构和链式结构,因为队列的使用情况多为增加和删除,很少查询,所以我们使用链表来实现一个自己的队列。

代码语言:javascript代码运行次数:0运行复制public class MyQueue {

class ListNode {

int val;

ListNode next;

public ListNode(int val) {

this.val = val;

}

}

private int usedsize;

ListNode head;

ListNode last;

public MyQueue() {

usedsize = 0;

head = last = null;

}

public boolean offer(int val) {

ListNode cur = new ListNode(val);

if (usedsize == 0) {

head = last = cur;

usedsize++;

return true;

} else {

last.next = cur;

last = cur;

usedsize++;

return true;

}

}

public int poll(){

ListNode cur=head;

head=head.next;

usedsize--;

return cur.val;

}

public int peek(){

return head.val;

}

public int size(){

return usedsize;

}

public boolean isEmpty(){

return usedsize==0;

}

}2.Queue的基本使用在java中,Queue是个接口,底层是通过链表实现的,下面是Queue提供的方法

因为Queue是接口,不能直接实例对象,所以创建对象时需要借助LinkedList,如下:

代码语言:javascript代码运行次数:0运行复制Queue q = new LinkedList<>();3.循环队列详解循环队列,即首尾相连的队列,如下所示:

在基于顺序结构实现的队列中,数组头部排出数据后,空间便不能在被使用,循环队列的一个好处是我们可以利用这个队列之前用过的空间。

循环队列的设计需要注意几点:

1.如何实现循环:

通过设置front,rear两个前后,指针,每次增加或删除数据通过(front/rear+1)%arr.length即可。

2.需要注意当front==rear时,该队列为空

3.如何辨别队列是否满:

可以通过设置size,size等于数组长度则满保留一个空位置,rear+1=front时,队列满下面是一道设计循环队列的oj题,大家可以趁热打铁:

设计循环队列

4.双端队列详解双端队列(deque)是指允许两端都可以进行入队和出队操作的队列,deque 是 “double ended queue” 的简称。那就说明元素可以从队头出队和入队,也可以从队尾出队和入队。

与Queue一样,Deque在Java中是一个接口。在实际工程中,使用Deque接口是比较多的,栈和队列均可以使用该接口。

代码语言:javascript代码运行次数:0运行复制Deque stack = new ArrayDeque<>();//双端队列的线性实现

Deque queue = new LinkedList<>();//双端队列的链式实现5.分别用栈实现队列,队列实现栈来自力扣的两道算法题

1.用队列实现栈

2.用栈实现队列

相关文章

王者荣耀大招怎么释放

奥飞游戏

占星骰子怎么玩?记住这3点就够了(实用帖)

“家用纯电F1”上市,电动性能车真的有必要吗?

手机转接头有几种类型 手机转换接头使用步骤

深海鱼尾是什么鱼 深海鱼尾为什么鱼的尾巴

手机桌面小米图标怎么设置

铯原子钟的原理与结构简介

手机优酷怎么退出登录账号?详细教程来了!