import java.util.LinkedList;

import java.util.Queue;

public class TestQueue {

public static void main(String[] args) {

Queue q = new LinkedList<>();

q.offer(1);

q.offer(2);

q.offer(3);

q.offer(4);

q.offer(5);

System.out.println(q);

System.out.println(q.size());

q.poll();

q.poll();

System.out.println(q);

System.out.println(q.isEmpty());

}

}

//执行结果:[1, 2, 3, 4, 5]

// 5

// [3, 4, 5]

// false

3. 队列的模拟实现

===========

public class Queue {

public static class ListNode{

E val;

ListNode next;

ListNode pre;

ListNode(E val){

this.val = val;

}

}

ListNode first; //队头

ListNode last; //队尾

int size = 0;

//入队列—插新节点

public void offer(E e){

ListNode newNode = new ListNode<>(e);

if(first==null){

first = newNode;

last = newNode;

}else{

last.next = newNode;

newNode.pre = last;

last = newNode;

}

size++;

}

//出队列—删除头

public E poll(){

E val = null;

if(first==null){

return null;

}else if(first == last){

first = null;

last = null;

}else{

val = first.val;

first = first.next;

first.pre.next = null;

first.pre = null;

}

size–;

return val;

}

//获取队头元素

public E peek(){

if(first == null){

return null;

}

return first.val;

}

//获取长度

public int size(){

return size;

}

//判空

public boolean isEmpty(){

return first==null;

}

//栈和队列一般不进行遍历操作

public static void main(String[] args) {

Queue q = new Queue<>();

q.offer(1);

q.offer(2);

q.offer(3);

q.offer(4);

System.out.println(q.size());

System.out.println(q.peek());

q.poll();

System.out.println(q.size());

}

}

4. 循环队列

========

循环队列使用的是循环数组,为什么不使用普通的数组呢?

如果使用一段连续的空间则会造成空间假溢出,造成空间的浪费,因为队列是在尾端进行插入,在头部进行删除,这样会造成数组中的元素偏后,如下面的情形:

所以使用的循环数组,循环队列就是解决空间的假溢出。

当对头与队尾重合时如何区分循环队列的空与满呢?我们可以通过添加size来记录队列元素的个数,当size为0时队列为空,当size不为0时,队列为满。

下面是循环队列的实现:

//循环队列

public class CircularQueue {

int array[];

int rear = 0; //队尾下标

int front = 0; //队头下标

int count = 0; //队列的有效元素的个数

int N;

public CircularQueue(int k) {

array = new int[k]; //创建一个数组

N = array.length; //用N标记数组的长度

}

public boolean enQueue(int value) { //入队列

if(isFull()){

return false; //如果队列已经满了,则返回false

}

array[rear] = value;

rear++;

if(rear==N){ //rear返回起始位置

rear = 0;

}

count++;

return true;

}

public boolean deQueue() { //出队列

if(isEmpty()){ //如果队列为空,则返回false

return false;

}

front++;

front%=N; //front返回起始位置

count–;

return true;

}

public int Front() { //获取队头元素

if(isEmpty()){

return -1;

}

return array[front];

}

public int Rear() { //获取队尾元素

if(isEmpty()){

return -1;

}

return array[(rear-1+N)%N]; //队尾元素的下标为rear-1,如果rear为0,则下标就为-1了,所以需要(rear-1+n)% n

}

public boolean isEmpty() { //检测队列是否为空

return count==0;

}

public boolean isFull() { //检测队列是否已满

return count==N;

}

}

5. 双端队列

=========

双端队列是指允许两端都可以进行入队列和出队列操作的队列,deque(double ended queue的简称)。

========================================================================================================================================================================================================================

6. OJ题

========

1. 用队列实现栈 (LeetCode225)用队列实现栈

可以点开上面链接来查看题目

方法:

1. 先创建两个队列

2. 判空:如果两个队列都为空,则返回true,否则返回false

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

光给面试题不给答案不是我的风格。这里面的面试题也只是凤毛麟角,还有答案的话会极大的增加文章的篇幅,减少文章的可读性

Java面试宝典2021版

最常见Java面试题解析(2021最新版)

2021企业Java面试题精选

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
a面试宝典2021版

[外链图片转存中…(img-nJNTNxax-1712547697795)]

[外链图片转存中…(img-hUDRSRVc-1712547697795)]

最常见Java面试题解析(2021最新版)

[外链图片转存中…(img-8v6StLRF-1712547697795)]

[外链图片转存中…(img-OxcOHQlk-1712547697796)]

2021企业Java面试题精选

[外链图片转存中…(img-VihO4lYd-1712547697796)]

[外链图片转存中…(img-GSK0Tsmq-1712547697797)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐