【数据结构】 - 队列 栈


theme: smartblue

一、队列

1、概念

队列(Queue)是一种常见的数据结构,它按照先进先出(First In First Out,FIFO)的原则进行元素操作。在队列中,新元素总是被添加到队列的末尾,而从队列中移除元素则是从队列的前端进行操作。

2、主要特点:

  1. FIFO原则: 队列中的元素按照它们加入队列的顺序被处理。最先加入队列的元素首先被处理,最后加入的元素则在队列中等待较长的时间。
  2. 两个基本操作: 队列支持两个基本操作,即入队(Enqueue)和出队(Dequeue)。入队操作将元素添加到队列的末尾,而出队操作则移除队列的前端元素。
  3. 先来先服务: 队列的设计符合“先来先服务”(First-Come-First-Serve,FCFS)的原则,即先到达的任务先被执行,后到达的任务排队等待。

3、基本操作:

  1. 入队(Enqueue): 将新元素添加到队列的末尾。
  2. 出队(Dequeue): 从队列的前端移除元素。
  3. 查看队头元素(Front): 获取队列的前端元素但不移除。
  4. 查看队尾元素(Rear): 获取队列的末尾元素但不移除。
  5. 判空(isEmpty): 检查队列是否为空。
  6. 队列大小(Size): 获取队列中元素的数量。

4、应用场景:

  1. 任务调度: 在操作系统中,用于处理进程的任务调度,按照先到先服务的原则。
  2. 广度优先搜索: 在图算法中,广度优先搜索时使用队列来管理节点的访问顺序。
  3. 缓存: 在计算机系统中,队列常被用于实现缓存,按照FIFO原则管理缓存中的数据。
  4. 打印队列: 打印任务按照先到先服务的方式排队等待执行。
  5. 消息队列: 在分布式系统中,用于异步通信和事件处理。

5、java实现一个简单的队列

import java.util.LinkedList;public class QueueExample {public static void main(String[] args) {// 创建一个整数队列Queue<Integer> integerQueue = new Queue<>();// 入队操作integerQueue.enqueue(1);integerQueue.enqueue(2);integerQueue.enqueue(3);// 出队操作System.out.println("Dequeue: " + integerQueue.dequeue());System.out.println("Dequeue: " + integerQueue.dequeue());// 再次入队integerQueue.enqueue(4);// 打印队列元素System.out.print("Queue: ");integerQueue.printQueue();}static class Queue<T> {private final LinkedList<T> list = new LinkedList<>();// 入队public void enqueue(T item) {list.addLast(item);}// 出队public T dequeue() {if (isEmpty()) {throw new IllegalStateException("Queue is empty");}return list.removeFirst();}// 检查队列是否为空public boolean isEmpty() {return list.isEmpty();}// 获取队列大小public int size() {return list.size();}// 打印队列元素public void printQueue() {for (T item : list) {System.out.print(item + " ");}System.out.println();}}
}

LinkedList 实现了一个简单的队列。enqueue 方法用于入队,dequeue 方法用于出队,isEmpty 方法检查队列是否为空,size 方法获取队列大小,printQueue 方法打印队列元素。

二、栈

1、概念

栈(Stack)是一种常见的数据结构,它按照后进先出(Last In First Out,LIFO)的原则进行元素操作。在栈中,新元素总是被添加到栈的顶部,而从栈中移除元素也是从栈顶进行操作。

2、主要特点:

  1. LIFO原则: 栈中的元素按照它们加入栈的顺序的相反顺序进行处理。最后加入栈的元素首先被处理,最先加入的元素则在栈中等待较长的时间。
  2. 基本操作: 栈支持两个基本操作,即入栈(Push)和出栈(Pop)。入栈操作将新元素添加到栈的顶部,而出栈操作则移除栈顶元素。
  3. 限定访问点: 栈是一种限定访问点的数据结构,只能在栈顶进行操作。这意味着只能访问、添加和移除栈顶元素,而不能直接访问栈中的其他元素。

3、基本操作:

  1. 入栈(Push): 将新元素添加到栈的顶部。
  2. 出栈(Pop): 从栈的顶部移除元素。
  3. 查看栈顶元素(Top): 获取栈顶元素但不移除。
  4. 判空(isEmpty): 检查栈是否为空。
  5. 栈大小(Size): 获取栈中元素的数量。

4、应用场景:

  1. 函数调用: 在计算机内存中,用于存储函数调用的信息,包括局部变量、返回地址等。
  2. 表达式求值: 在编译器中,用于求解表达式的值,实现递归和运算符优先级的处理。
  3. 括号匹配: 在编程中,用于检查括号的嵌套是否正确匹配。
  4. 浏览器历史记录: 浏览器使用栈来存储用户浏览的页面历史记录。
  5. 撤销机制: 许多应用程序使用栈来实现撤销(Undo)操作,以回退用户的操作历史。
  6. 深度优先搜索: 在图算法中,深度优先搜索使用栈来管理节点的访问顺序。

5、java实现一个简单的栈

import java.util.LinkedList;public class StackExample {public static void main(String[] args) {// 创建一个整数栈Stack<Integer> integerStack = new Stack<>();// 压栈操作integerStack.push(1);integerStack.push(2);integerStack.push(3);// 弹栈操作System.out.println("Pop: " + integerStack.pop());System.out.println("Pop: " + integerStack.pop());// 再次压栈integerStack.push(4);// 打印栈元素System.out.print("Stack: ");integerStack.printStack();}static class Stack<T> {private final LinkedList<T> list = new LinkedList<>();// 压栈public void push(T item) {list.addLast(item);}// 弹栈public T pop() {if (isEmpty()) {throw new IllegalStateException("Stack is empty");}return list.removeLast();}// 检查栈是否为空public boolean isEmpty() {return list.isEmpty();}// 获取栈大小public int size() {return list.size();}// 打印栈元素public void printStack() {for (T item : list) {System.out.print(item + " ");}System.out.println();}}
}

LinkedList 实现了一个简单的栈。push 方法用于压栈,pop 方法用于弹栈,isEmpty 方法检查栈是否为空,size 方法获取栈大小,printStack 方法打印栈元素。

总结

一定要多思考,如果人永远待在舒适圈的话,人永远不会成长。共勉。

觉得作者写的不错的,值得你们借鉴的话,就请点一个免费的赞吧!这个对我来说真的很重要。૮(˶ᵔ ᵕ ᵔ˶)ა

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/664693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring-boot-actuator 服务监控

1 概述 服务启动时&#xff0c;通过spring-boot-actuator 监控es等服务是否连接成功等 2 依赖 <!-- 服务监控 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId><…

2024年美国大学生数学建模竞赛(E题)财产保险建模|MCDA/随机森林建模解析,小鹿学长带队指引全代码文章与思路

我是鹿鹿学长&#xff0c;就读于上海交通大学&#xff0c;截至目前已经帮500人完成了建模与思路的构建的处理了&#xff5e; 本文运用利用时间序列和强化学习结合DQN算法&#xff0c;解决保险业可持续性问题&#xff1b;采用MCDA和随机森林&#xff0c;应对地产业保险挑战&…

[Unity Sentis] Unity Sentis 详细步骤工作流程

文章目录 1. 导入模型文件支持的模型创建运行时模型导入错误 2. 为模型创建输入将数组转换为张量创建多个输入进行操作 3. 创建一个引擎来运行模型创建一个Worker后端类型 4. 运行模型5. 获取模型的输出获取张量输出多个输出打印输出 1. 导入模型文件 要导入 ONNX 模型文件&am…

电脑怎么录屏?打造专业级视频内容!

随着科技的进步&#xff0c;电脑已经深入到我们的日常生活和工作中。而在这个数字时代&#xff0c;录制屏幕内容变得日益重要。无论是制作教程、分享游戏技巧&#xff0c;还是记录重要的演示&#xff0c;录屏都是一个不可或缺的功能。可是电脑怎么录屏呢&#xff1f;本文将深入…

Cmake语法学习3:语法

1.双引号 1.1 命令参数 1&#xff09;介绍 命令中多个参数之间使用空格进行分隔&#xff0c;而 cmake 会将双引号引起来的内容作为一个整体&#xff0c;当它当成一个参数&#xff0c;假如你的参数中有空格&#xff08;空格是参数的一部分&#xff09;&#xff0c;那么就可以使…

web前端较新的前端技术和趋势

Web前端的技术发展迅速&#xff0c;不断有新工具和框架出现。以下是一些较新的前端技术和趋势&#xff1a; 框架和库&#xff1a; React&#xff1a;Facebook开发的一个用于构建用户界面的JavaScript库&#xff0c;目前非常流行。 Vue.js&#xff1a;一个渐进式JavaScript框架…

java DateTimeFormatter 使用

DateTimeFormatterBuilder dateTimeFormatterBuilder new DateTimeFormatterBuilder().append(DateTimeFormatter .ofPattern(“[MM/dd/yyyy]” “[dd-MM-yyyy]” “[yyyy-MM-dd]” “[yyyy-M-d]” “[dd MMM yyyy]”)); LocalDate dd LocalDate.parse(“03 Feb 2024”,…

国自然结题报告为什么不能下载?如何解决

一直以来&#xff0c;国自然的结题报告都不是只能在线查看&#xff0c;这给很多科研人员带来一些不方便&#xff0c;因为在线查看的话&#xff0c;受限于网络&#xff0c;必须有网的时候才能看&#xff0c;并且官方网站的响应比较慢&#xff0c;想快速翻页&#xff0c;基本不可…

《苍穹外卖》知识梳理P2-公共类说明

《苍穹外卖》知识梳理P2 上一节中&#xff0c;进行了项目结构的搭建知识梳理P1 公共类说明 所有公共类都位于common模块下&#xff0c;由于每个包下的类很多&#xff0c;在此不一一列举&#xff1b; 1.constant包&#xff1a;主要存放常量类&#xff0c;类中只有静态常量&am…

leetcode-链表专题

25.K个一组翻转链表 题目链接 25. K 个一组翻转链表 - 力扣&#xff08;LeetCode&#xff09; 解题思路 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class So…

【Java程序设计】【C00240】基于Springboot的班级综合测评管理系统(有论文)

基于Springboot的班级综合测评管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的班级综合测评管理系统 本系统分为学生功能模块、管理员功能模块以及教师功能模块。 管理员功能模块&#xff1a;管理员功能…

MySQL中DML操作(九)

MySQL中DML操作&#xff08;九&#xff09; DML语言是操作数据的语言 一、添加数据(INSERT) 1.1 选择插入 INSERT INTO 表名(列名 1 &#xff0c;列名 2 &#xff0c;列名 3.....) VALUES(值 1 &#xff0c;值 2 &#xff0c;值 3......); 1.2 完成插入 INSERT INTO 表名…

L1-020 帅到没朋友分数 20

当芸芸众生忙着在朋友圈中发照片的时候&#xff0c;总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。 输入格式&#xff1a; 输入第一行给出一个正整数N&#xff08;≤100&#xff09;&#xff0c;是已知朋友圈的个数&#xff1b;随后N行&#xff0c;每…

MySQL学习记录——일 MySQL 安装、配置

文章目录 1、卸载内置环境2、安装MySQL3、启动4、登录5、配置my.cnf 当前环境是1核2G云服务器&#xff0c;CentOS7.6。要在root用户下进行操作 1、卸载内置环境 云服务器中有可能会自带mysql还有mariadb这样的数据库服务&#xff0c;在安装我们mysql前&#xff0c;得先查找一下…

迪文串口屏数据的隐藏功能

一、概述 由于项目中在使用迪文屏显示数据的时候&#xff0c;需要在数据为0的时候不显示0&#xff0c;而迪文屏默认的数据变量在无值的时候显示为0&#xff0c;此时可以使用数据的隐藏功能指令 二、具体实现方法 1、可以使用描述指针地址来实现数据的隐藏&#xff0c;查看应用…

大模型重塑车载语音交互:赛道巨头如何引领新周期?

车载语音交互赛道正进入新一轮竞争周期。 高工智能汽车注意到&#xff0c;传统车载语音交互赛道当前基本已进入成熟期&#xff0c;主要为任务型助手&#xff0c;包括从单轮对话到多轮对话&#xff0c;单音区到多音区&#xff0c;从单一的导航、多媒体娱乐等座舱功能扩展智能驾…

Ubuntu 添加字体

Ubuntu 添加字体 Ubuntu如何添加新的字体&#xff1f;似乎远远没有Windows方便呀&#xff0c;查询了一些资料&#xff0c;与大家分享。 方法1 根据字体名称直接安装 oyroy-FMVU08001:~$ sudo apt-get install fonts-wqy-zenhei [sudo] roy 的密码&#xff1a; 正在读取软件…

装饰property的两种使用方法

property的作用 在调用对象方法时可以向调用对象属性一样 如何使用property 定义时&#xff0c;在实例方法的基础上添加 property 装饰器&#xff1b;并且仅有一个self参数调用时&#xff0c;无需括号 方法&#xff1a;foo_obj.func()property属性&#xff1a;foo_obj.prop…

MacOS安装dmg提示已文件已损坏的解决方法

MacOS安装dmg提示已文件已损坏的解决方法 导致原因是应用没有上传到苹果的appstroe&#xff0c;系统限制了安装&#xff0c;破碎提示是苹果的误导小手段 方法 一 App 在macOS Catalina&#xff08;比较新的系统&#xff0c;例如m1&#xff0c;m2也适用&#xff09;下提示已损坏…

2024美赛D题完整四小问代码+数据集+22页成品参考论文

D题&#xff08;文末获取完整版的&#xff09; 题目三&#xff1a;新控制方法是否会让各利益相关者满意或优于当年实际记录的 水位? 解题思路 问题 3 要求我们理解控制算法对两座控制大坝流出量的敏感性&#xff0c;并利用 2017 年 的数据来验证新控制措施是否能为各方利益相关…