【栈和队列】java实现栈和队列以及集合中的栈和队列

article/2025/11/7 10:54:05

前言:
大家好,我是良辰丫🏍🏍🏍,今天我带领大家去学习栈和队列的相关知识,💞💞💞栈和队列在数据结构中是相对简单的,但是应用还是蛮多的,不积小流无以成江海。加油,不断遨游知识的汪洋大海。🚀🚀🚀

🧑个人主页:良辰针不戳
📖所属专栏:java数据结构
🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。
💦期待大家三连,关注,点赞,收藏。
💌作者能力有限,可能也会出错,欢迎大家指正。
💞愿与君为伴,共探Java汪洋大海。


目录

  • 1、栈
    • 1.1 入栈序列选择题
    • 1.2 模拟栈的基本操作
    • 1.3 集合中栈的基本操作
  • 2、队列
    • 2.1 模拟队列的基本操作
    • 2.2 集合中队列的基本操作


1、栈

是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出的原则。下面摞在一起的碗可以形象的说明栈的特点,先放的碗最后拿出来。

在这里插入图片描述

栈的插入操作叫做入栈,栈的删除操作叫做出栈。这是一种特殊的数据结构类型,只能从一端进行操作,简单看一个图来更加深刻的了解栈。

在这里插入图片描述

1.1 入栈序列选择题

希望可以通过这个简单的选择题让大家更深刻的认识入栈序列。

在这里插入图片描述

  • A. 依次入栈ABCDE,然后出栈序列为EDCBA。
  • B.先入栈ABCD,然后出一个D,再入栈E,出栈E,==有的伙伴可能会疑惑,不是全要入栈才能进行出栈嘛?嘿嘿嘿,可以进栈一个,紧接着就进行出栈,这是一个误区。==然后出栈CBA。
  • C.先入栈ABCD,然后出DC,接着入栈E,然后出栈E,最后出栈,咿呀,我们会发现,现在栈里面还有A和B,但是A先进去的,B压着A,要出栈的话先出B,于是乎!这个出栈序列是错误的。怎么样,很简单吧,比起咱们高中学的知识点,这不是小儿科嘛!
  • D.这个序列是进一个出一个,此时,入栈序列和出栈序列是一样的。

1.2 模拟栈的基本操作

在实际操作中,我们不用写关于栈的操作代码,但是我们需要去了解栈的底层原理,通过了解栈的基本操作可以让我们更深刻的认识栈。

下面是java底层原理栈的基本操作。后序我们做题直接调用即可。

在这里插入图片描述

以下是模拟栈的基本操作,不难,我们就简单的用注释说明一下。

import java.util.*;
public class MyStack {
//栈的底层原理是数组public int[] elem;public int usedSize;//有效个数public MyStack() {this.elem = new int[10];}//入栈public void push(int val) {if(isFull()) {//满的话进行扩容elem = Arrays.copyOf(elem,2*elem.length);}//记住入栈后有效个数一定要进行加1//如果大家不习惯这种写法,可以分开写elem[usedSize++] = val;}public boolean isFull() {return usedSize == elem.length;}//出栈public int pop() {if(isEmpty()) {//如果栈为空,直接可以抛出异常//不喜欢这种写法可以写一个输出语句提示一下,然后return退出throw new RuntimeException("栈是空的!");}//出栈后usedSize-1,下面两种写法都可以/*int val = elem[usedSize-1];usedSize--;return val;*//* usedSize--;return elem[usedSize];*/return elem[--usedSize];}//判断是否为空public boolean isEmpty() {return usedSize == 0;}//peek和pop是有区别的,peek只提取栈顶元素,并没有出栈public int peek() {if(isEmpty()) {throw new RuntimeException("栈是空的!");}return elem[usedSize-1];}
}

1.3 集合中栈的基本操作

public static void main(String[] args) {Stack<Integer> stack = new Stack<>();stack.push(1);stack.push(2);stack.push(3);stack.push(4);System.out.println(stack.pop());//4System.out.println(stack.pop());//3System.out.println(stack.pop());//2System.out.println(stack.peek());//1System.out.println(stack.pop());//1}

运行结果截图

在这里插入图片描述

看到这里,栈所涉及的知识点就基本完了,后面做题过程中,好多数据结构都会用到栈,就连链表相关题目很多都会涉及,学习完简单知识一定要去多刷题。

2、队列

队列这个词大家并不陌生,队列和排队其实大同小异。就像下面的小盆友,站在第一个的先出教室,站在最后一个的最后出教室,于是就引入了队列的特点,先进先出

在这里插入图片描述

2.1 模拟队列的基本操作

在这里插入图片描述

模拟队列的基本操作,这是通过一个链表实现的。

public class MyQueue {static class Node {public int val;public Node next;public Node(int val) {this.val = val;}}public Node head;public Node last;public int usedSize;//入队public void offer(int val) {Node node = new Node(val);if(head == null) {head = node;last = node;}else {last.next = node;last = node;}usedSize++;}public int poll() {if(empty()) {throw new EmptyException("队列为空");}int ret = head.val;head = head.next;if(head == null) {last = null;//只有一个节点 那么last也要置空}usedSize--;return ret;}public boolean empty() {return usedSize == 0;}public int peek() {if(empty()) {throw new EmptyException("队列为空");}return head.val;}public int getUsedSize() {return usedSize;}
}

2.2 集合中队列的基本操作

public static void main(String[] args) {Queue<Integer> queue = new LinkedList<>();queue.offer(1);queue.offer(2);queue.offer(3);queue.offer(4);System.out.println(queue.poll());System.out.println(queue.poll());System.out.println(queue.poll());System.out.println(queue.poll());}

运行结果截图

在这里插入图片描述

后序:
今天栈和队列的学习就告一段落了,希望这篇文章能给大家带来帮助,如果这篇文章给大家带来一定的帮助的话,期待大家的点赞,三连哦!!!⛽⛽⛽你们的支持就是我的加油站哦。


http://chatgpt.dhexx.cn/article/2tXxOLPX.shtml

相关文章

数据结构——栈和队列

目录 一、栈 1.栈的概念及结构栈 2.栈的实现 二、队列 1.队列的概念及结构队列 2.队列的实现 一、栈 1.栈的概念及结构栈 一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。不同于我们所说的栈区&#xff0c;栈是一种数据结构&#xff0c;栈区…

C语言栈和队列的实现

✅作者简介&#xff1a;嵌入式入坑者&#xff0c;与大家一起加油&#xff0c;希望文章能够帮助各位&#xff01;&#xff01;&#xff01;&#xff01; &#x1f4c3;个人主页&#xff1a;rivencode的个人主页 &#x1f525;系列专栏&#xff1a;玩转数据结构 &#x1f4ac;推荐…

栈和队列讲解

目录 1、栈 &#xff08;1&#xff09;栈的概念及结构 &#xff08;2&#xff09;栈的实现 2、队列 &#xff08;1&#xff09;队列的概念及结构 &#xff08;2&#xff09;队列的实现 前言&#xff1a;栈和队列是在顺序表和链表的延伸&#xff0c;如果前面的顺序表和链…

栈和队列(C++)

栈的相关概念 栈是仅在表尾进行插入&#xff0c;删除操作的线性表 表尾称为栈顶Top&#xff0c;表头称为栈底Base 插入元素到栈顶&#xff0c;称为入栈&#xff1b;从栈顶删除最后一个元素&#xff0c;称为出栈 栈的运算规则&#xff1a;先进后出 一.顺序栈 顺序栈的表示 …

栈和队列的基本操作(栈和队列的区别)

数据结构中的栈与内存中的栈的不同 一、数据结构中的堆栈 在数据结构中的堆栈&#xff0c;实际上堆栈是两种数据结构&#xff1a;堆和栈。堆和栈都是一种数据项按序排列的数据结构。 1.栈就像装数据的桶或箱子 我们先从大家比较熟悉的栈说起吧&#xff0c;它是一种具有后进先…

栈和队列——python

目录 一、栈 定义一个栈 栈的应用——括号匹配问题 栈的应用——迷宫问题 二、队列 自定义队列 python队列的内置模块 队列应用——打印文件后五行 队列应用——迷宫问题 python的数据结构与算法之栈与队列 自学视频&#xff1a;bilibili路飞学城清华大学博士讲解Pyt…

栈和队列的概念

文章目录 栈、队列和双端队列栈队列双端队列Java 中的栈、队列和双端队列 单调栈和单调队列二叉堆和优先队列二叉堆优先队列 目录 栈、队列和双端队列 栈和队列是常见的数据结构。栈的特点是后进先出&#xff0c;添加元素、删除元素和查看元素都在栈顶操作。队列的特点是先进先…

栈和队列详解

文章目录 前言一、栈&#xff1a;1.栈的基本概念&#xff1a;2.如何实现栈&#xff1f;3.栈代码演示&#xff1a; 二、队列&#xff1a;1.队列的基本概念&#xff1a;2.如何实现队列&#xff1f;3.队列代码演示&#xff1a; 总结 前言 栈和队列也属于线性表&#xff0c;但是它…

【数据结构】栈和队列详细分析(全)

目录 1.前言2.栈的定义与特点2.1顺序栈的定义2.2顺序栈的操作2.3链栈的定义2.4链栈的操作 3.队列的定义与特点3.1循环队列3.2循环队列的操作3.3链队的定义3.4链队的操作 4.总结 1.前言 栈和队列是两种重要的线性结构。从数据结构角度看&#xff0c;栈和队列也是线性表&#xf…

【Python数据结构系列】❤️《栈(顺序栈与链栈)》——❤️知识点讲解+代码实现

灵魂拷问&#xff1a;为什么要学数据结构&#xff1f; 数据结构&#xff0c;直白地理解&#xff0c;就是研究数据的存储方式。数据存储只有一个目的&#xff0c;即为了方便后期对数据的再利用。因此&#xff0c;数据在计算机存储空间的存放&#xff0c;决不是胡乱的&#xff0c…

数据结构——栈与队列

目录 一、栈 1.栈的定义 2.栈的分类与基本操作 1. 顺序栈 2.链栈 3.栈与递归的实现 1.递归的简单描述 2.递归过程及与栈的关联 3.递归过程示意图 二.队列 1.队列的定义 2.队列的分类与基本操作 1.顺序队列 2.链队列 3.循环队列 1.假溢出 2.循环队列 3.循环队列相…

栈与队列详解

目录 申明1. 栈的定义1.1 栈的定义1.2 进栈出栈变化形式 2. 栈的抽象数据类型3. 栈的顺序存储结构及实现3.1 栈的顺序存储结构3.2 栈的顺序存储结构——进栈操作3.3 栈的顺序存储结构——出栈操作 4. 两栈共享空间5. 栈的链式存储结构及实现5.1 栈的链式存储结构5.2 栈的链式存…

栈与队列(超详细)

目录 一、栈&#xff08;Stack&#xff09;1、什么是栈&#xff1f;2、栈的常见方法3、自己实现一个栈&#xff08;底层用一个数组实现&#xff09; 二、队列&#xff08;Queue&#xff09;1、什么是队列&#xff1f;2、队列的常见方法3、队列的实现&#xff08;单链表实现&…

C语言---栈和队列

严格来说,栈和队列都属于线性表 "一对一" 栈:"先进后出" 队列: "先进先出" 栈 栈只能从一端存取,另一端是封闭的 在栈中,不论是存还是取,都必须遵循"先进后出"的原则 >栈是一种只能从表的一端存取数据,且遵循"先进后出…

数据结构与算法——栈和队列

&#x1f60a;数据结构与算法——栈和队列 &#x1f680;前言&#x1f680;栈&#xff08;satck&#xff09;&#x1f6a2;栈的定义&#x1f6a2;共享栈&#xff08;节省空间&#xff09;&#x1f6a2;栈的表示和实现&#xff08;顺序栈&#xff09;&#x1f47b;顺序栈的定义&…

数据结构:栈和队列(Stack Queue)【详解】

友情链接&#xff1a;数据结构专栏 目录 栈和队列【知识框架】 栈一、栈的基本概念1、栈的定义2、栈的常见基本操作 二、栈的顺序存储结构1、栈的顺序存储2、顺序栈的基本算法&#xff08;1&#xff09;初始化&#xff08;2&#xff09;判栈空&#xff08;3&#xff09;进栈&a…

web 移动端开发基础

web 移动端开发基础 文章目录 web 移动端开发基础了解视口相关内容meta 视口标签掌握二倍图用法物理像素 & 物理像素比多倍图二倍精灵图做法 了解移动端常见选择方案掌握移动端常见问题解决方案移动端常见的布局方式流式布局&#xff08;百分比布局&#xff09;flex 布局 -…

Web移动端

1.PC端和移动端的区别: PC端:屏幕大 用网页固定版心,要考虑浏览器兼容问题,(布局:浮动&#xff0b;定位&#xff0b;标准流) 移动端: 手机屏幕小&#xff0c;网页宽度多数为100%&#xff0c;是适配手机屏幕宽度 移动端则基本不需要考虑兼容性问题&#xff0c;放心大胆使用CS…

移动端网页开发基础

文章目录 前言一、浏览器1.pc端常见浏览器2.移动端常见浏览器 二、视口1.布局视口layout viewport2.视觉视口visual viewport3.理想视口ideal viewport 三、二倍图1.物理像素和物理像素比2.二倍图用法 四、移动端开发选择1.单独制作移动端页面2.响应式兼容pc移动端3.移动端常见…

20.【移动端Web开发之响应式布局】

文章目录 【移动端Web开发之响应式布局】前端小抄(20)一、响应式开发1.1 响应式开发原理1.2 响应式布局容器 二、Bootstrap前端开发框架2.1 Bootstrap简介2.2 Bootstrap使用2.3 布局容器 三、Bootstrap栅格系统3.1 栅格系统简介3.2 栅格选项参数3.3 列嵌套3.4 列偏移3.5 列排序…