Java 【数据结构】 栈(Stack)和队列(Queue)【神装】

这篇具有很好参考价值的文章主要介绍了Java 【数据结构】 栈(Stack)和队列(Queue)【神装】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java 【数据结构】 栈(Stack)和队列(Queue)【神装】,【Java】登神长阶 史诗般的Java成神之路,数据结构

Java 【数据结构】 栈(Stack)和队列(Queue)【神装】,【Java】登神长阶 史诗般的Java成神之路,数据结构

 登神长阶

 第三神装 Stack

   第四神装 Queue  


目录

🔋一.栈 Stack

💻1.概念

🖥️2.基本操作 

🖨️3.相关OJ题  

🖱️4.栈、虚拟机栈和栈帧的区别

🪫二.队列 Queue

🖲️1.概念

💽2.基本操作

🔌三.总结与反思


🔋一.栈 Stack

💻1.概念

        在 Java 中,栈(Stack)是一种后进先出(LIFO)的数据结构,用于存储元素。在栈中,只有栈顶的元素是可见的和可访问的,其他元素都被隐藏起来,直到栈顶的元素被移除或弹出。Java 中的 java.util.Stack 类实现了这种栈的数据结构,并且是线程安全的,继承自 Vector 类。

Java 【数据结构】 栈(Stack)和队列(Queue)【神装】,【Java】登神长阶 史诗般的Java成神之路,数据结构

压栈:栈的插入操作叫做进栈 / 压栈 / 入栈, 入数据在栈顶
出栈:栈的删除操作叫做出栈。 出数据在栈顶

Java 【数据结构】 栈(Stack)和队列(Queue)【神装】,【Java】登神长阶 史诗般的Java成神之路,数据结构

🖥️2.基本操作 

Java 【数据结构】 栈(Stack)和队列(Queue)【神装】,【Java】登神长阶 史诗般的Java成神之路,数据结构

方法
功能
Stack() 构造一个空的栈
E push(E e) e入栈,并返回e
E pop() 将栈顶元素出栈并返回
E peek() 获取栈顶元素
int size()
获取栈中有效元素个数
boolean empty() 检测栈是否为空

示例

以下是一个使用 Stack 类的简单示例:

import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<String> stack = new Stack<>();
        
        // 压栈操作
        stack.push("Java");
        stack.push("Python");
        stack.push("C++");
        
        // 弹栈操作
        String topLanguage = stack.pop();
        System.out.println("弹出栈顶元素:" + topLanguage);
        
        // 查看栈顶元素
        String currentTop = stack.peek();
        System.out.println("当前栈顶元素:" + currentTop);
        
        // 判空操作
        if (stack.isEmpty()) {
            System.out.println("栈为空");
        } else {
            System.out.println("栈不为空");
        }
    }
}

这个示例展示了栈的基本操作,包括压栈、弹栈、查看栈顶元素和判空。栈在 Java 中常用于处理需要后进先出顺序的场景,例如表达式求值、逆序输出等。

🖨️3.相关OJ题  

括号匹配

 文章来源地址https://www.toymoban.com/news/detail-859619.html

逆波兰表达式

 

出栈入栈次序匹配

 

最小栈

🖱️4.栈、虚拟机栈和栈帧的区别

  1. 栈(Stack)

    • 在计算机科学中,栈是一种数据结构,遵循后进先出(LIFO)的原则,用于存储和管理函数调用、局部变量和临时数据。
    • 栈通常由操作系统提供支持,用于管理程序的执行环境和内存分配。
  2. 虚拟机栈(Java Virtual Machine Stack)

    • 虚拟机栈是 Java 虚拟机在执行 Java 程序时使用的内存区域之一,与线程生命周期相同。
    • 每个线程在创建时都会分配一个对应的虚拟机栈,用于存储方法的调用栈帧(Stack Frame)、局部变量表、操作数栈等信息。
    • 虚拟机栈中的栈帧存储了方法的运行时数据结构,每个方法的调用都会创建一个对应的栈帧。
  3. 栈帧(Stack Frame)

    • 栈帧是虚拟机栈中的一个重要概念,用于表示方法在虚拟机中的运行状态和执行信息。
    • 每个方法的调用都会对应一个栈帧,包含局部变量表、操作数栈、动态链接、返回地址等部分。
    • 当方法被调用时,会创建一个新的栈帧压入虚拟机栈,并在方法执行完毕后弹出栈帧,恢复上一个调用栈帧的执行。

区别总结:

  •  是一种数据结构,用于存储和管理数据,具有后进先出的特性。
  • 虚拟机栈 是 Java 虚拟机提供的内存区域,用于存储线程的方法调用栈帧和相关数据。
  • 栈帧 是虚拟机栈中的一个部分,用于表示方法的运行状态和执行信息,包含局部变量表、操作数栈等。

🪫二.队列 Queue

🖲️1.概念

        在 Java 中,队列(Queue)是一种先进先出(FIFO)的数据结构,用于存储元素。队列在 java.util 包中有多种实现,如 LinkedListArrayDequePriorityQueue只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear出队列:进行删除操作的一端称为队头(Head/Front)

Java 【数据结构】 栈(Stack)和队列(Queue)【神装】,【Java】登神长阶 史诗般的Java成神之路,数据结构

Java 【数据结构】 栈(Stack)和队列(Queue)【神装】,【Java】登神长阶 史诗般的Java成神之路,数据结构

💽2.基本操作

方法
功能
boolean offer(E e) 入队列
E poll() 出队列
peek() 获取队头元素
int size() 获取队列中有效元素个数
boolean isEmpty() 检测队列是否为空

注意Queue是个接口,在实例化时必须实例化LinkedList的对象,因为LinkedList实现了Queue接口。

public static void main(String[] args) {
    Queue<Integer> q = new LinkedList<>();
    q.offer(1);
    q.offer(2);
    q.offer(3);
    q.offer(4);
    q.offer(5); // 从队尾入队列
    System.out.println(q.size());
    System.out.println(q.peek()); // 获取队头元素
    q.poll();
    System.out.println(q.poll()); // 从队头出队列,并将删除的元素返回
    if(q.isEmpty()){
    System.out.println("队列空");
    }else{
    System.out.println(q.size());
    }
}

这个示例展示了队列的基本操作,包括入队、出队、查看队头元素和判空。队列在 Java 中常用于实现任务调度、消息传递等场景,能够有效管理元素的顺序和执行顺序。

🔌三.总结与反思

💡人类也需要梦想者,这种人醉心于一种事业的大公无私的发展,因而不能注意自身的物质利益。——居里夫人

        在学习 Java 中的栈(Stack)和队列(Queue)这两种经典数据结构时,我深刻体会到它们的重要性和应用广泛性。通过掌握栈和队列的基本操作,如入栈、出栈、入队、出队,我加深了对数据结构的理解。

        在实践中,我意识到需要关注空间复杂度和时间复杂度的问题,尤其在处理大规模数据集时。异常处理也是学习中的重要环节,确保程序能够正常处理各种边界情况。了解栈和队列在算法和程序设计中的应用场景,如表达式求值、任务调度等,为我提供了有效的工具。通过深入研究 Java 中不同的栈和队列实现类,我学习了它们的特性和使用方法。

        我希望进一步应用所学知识,深入探索栈和队列在更复杂算法和数据结构中的应用,提升自己的编程能力。通过不断练习和实践,我相信能够更熟练地运用栈和队列,解决实际问题,并在日常开发中发挥它们的作用。我的学习之路将持续前行,为未来的软件开发工作做好准备。


🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀

以上,就是本期的全部内容啦,若有错误疏忽希望各位大佬及时指出💐

  制作不易,希望能对各位提供微小的帮助,可否留下你免费的赞呢🌸

 

到了这里,关于Java 【数据结构】 栈(Stack)和队列(Queue)【神装】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java学数据结构(1)——抽象数据类型ADT & 表List、栈Stack和队列Qeue

    1.抽象数据类型Abstract data type的概念; 2.表list,java中的ArrayList和linkedlist以及vector的分析; 3.栈stack的分析以及应用; 4.队列queue的理解,以及rabbitmq的应用; 抽象数据类型(abstract data type,ADT)是带有一组操作的一些对象的集合。抽象数据类型是数学的抽象;在ADT的定义中没有地

    2024年02月11日
    浏览(42)
  • 【LeetCode】设计数据结构 | List、Stack、Queue、DLinkedList

    设计链表(中等) 707. 设计链表 冗余版 代码复用简化版 用栈实现队列(简单) 232. 用栈实现队列 用队列实现栈(简单) 225. 用队列实现栈 方法一:双队列实现 方法二:单队列实现 设计循环队列(中等) 622. 设计循环队列 使用数组实现 使用链表实现 设计循环双端队列(中

    2024年02月14日
    浏览(34)
  • Java 【数据结构】 二叉树(Binary_Tree)【神装】

        登神长阶  第五神装 二叉树 Binary-Tree 目录  🎷一.树形结构 🪗1.概念 🎸2.具体应用 🎹 二.二叉树(Binary Tree) 🎺1.概念  🎻2.表现形式 🪕3.特殊类型 🥁3.1完全二叉树(Complete Binary Tree) 🪘3.2满二叉树(Full Binary Tree) 🔋4.性质  🪫5.二叉树的遍历 💿5.1前中后序遍历

    2024年04月27日
    浏览(45)
  • 【数据结构】队列-Queue

    ⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈数据结构 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 队列: 只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(FirstIn First Out) 入队列:

    2024年02月08日
    浏览(43)
  • 数据结构:队列Queue详解

    队列 :只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。进行插入操作的一端称为 队尾 ,删除操作的一端称 队头 。 入队列 :进行插入操作的一端称为 队尾 。 出队列 :进行删除操作的一端称为 队头 。 在 Java 中, Queue是个接口,底层是通过链表

    2024年02月11日
    浏览(38)
  • 【数据结构】 队列(Queue)与队列的模拟实现

    队列 :只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有==先进先出FIFO(FirstIn First Out) ==入队列: 进行插入操作的一端称为 队尾(Tail/Rear) 出队列: 进行删除操作的一端称为 队头(Head/Front) 在Java中, Queue是个接口,底层是通过链表实现

    2024年02月11日
    浏览(49)
  • [数据结构 -- C语言] 队列(Queue)

    目录 1、队列 1.1 队列的概念及结构 2、队列的实现 2.1 接口 3、接口的实现 3.1 初始化队列 3.2 队尾入队列 分析: 3.3 队头出队列 分析: 3.4 获取队列头部元素 3.5 获取队列尾部元素 3.6 获取队列中有效元素个数 3.7 检测队列是否为空 3.7.1 int 类型判空 3.7.2 bool 类型判空 3.8 销毁队

    2024年02月07日
    浏览(44)
  • 【数据结构】队列(Queue)的实现 -- 详解

    1、概念 队列 :只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有 先进先出 FIFO(First In First Out)。 入队列 :进行 插入 操作的一端称为 队尾 。 出队列 :进行 删除 操作的一端称为 队头 。 2、结构 (1)队列的顺序存储结构 入队 ,不需要

    2024年02月15日
    浏览(38)
  • 【Golang】实现简单队列(Queue)数据结构

     在计算机科学中,队列是一种特殊的线性数据结构,它遵循FIFO(先进先出)原则。队列中的元素只能从一端(称为队尾或后端)添加,并且只能从另一端(称为队头或前端)移除。这种特性使得队列在许多算法和数据结构中都有广泛的应用,例如操作系统中的任务调度、网

    2024年01月19日
    浏览(39)
  • 队列(Queue):先进先出(FIFO)的数据结构

    队列是一种基本的数据结构,用于在计算机科学和编程中管理数据的存储和访问。队列遵循先进先出(First In, First Out,FIFO)原则,即最早入队的元素首先出队。这种数据结构模拟了物理世界中的队列,如排队等待服务的人。 在本篇博客中,我们将详细介绍队列的概念、用途

    2024年02月05日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包