数据结构:栈
文章目录
- 栈
- 一,概述
- 二,添加数据
- 三,删除数据
栈
一,概述
栈(Stack)是一种特殊的线性表,它只允许在一端进行插入和删除操作,通常被称为“后进先出”(Last In First Out,LIFO)的数据结构。
栈由一系列元素组成,每个元素具有一个唯一的标识符,称为“栈顶”。栈顶是栈中最后一个被插入的元素,也是下一个要被删除的元素。栈中的元素按照后进先出的顺序排列。
栈的主要操作包括:
- 入栈(Push):将一个元素插入到栈顶。
- 出栈(Pop):删除栈顶元素并返回它。
- 查看栈顶(Peek/Top):返回当前栈顶元素但不删除它。
- 判断栈是否为空(IsEmpty)。
栈在计算机科学中有广泛的应用,包括:
- 函数调用和递归:在函数调用过程中,将参数和局部变量压入栈中,当函数执行完毕时,将它们从栈中弹出。递归函数也可以使用栈来保存中间结果。
- 表达式求值:在算术表达式求值过程中,操作数和运算符被压入栈中,然后使用栈中的元素进行计算。
- 括号匹配:在程序设计中,使用栈来检查括号是否匹配。
- 后进先出数据结构:栈可以用于实现后进先出的数据结构,如浏览器的前进/后退功能、撤销/重做操作等。
- 内存管理:操作系统使用栈来管理程序的内存分配和释放。当一个函数被调用时,它的代码和数据被压入栈中;当函数执行完毕时,它们被从栈中弹出并释放内存。
总之,栈是一种非常有用的数据结构,在计算机科学中有广泛的应用。
简介:
- 栈是一种线性数据结构,意味着数据在栈中的排序是按照它们加入的顺序。
- 栈遵循 LIFO(Last In First Out)原则,这意味着最后一个添加到栈中的元素将是第一个被移除的元素。
- 栈只允许在同一端(称为“顶部”)进行添加和删除操作。这一端通常被称为“栈顶”,另一端被称为“栈底”。
- 栈不需要在添加或删除元素时进行任何排序或搜索操作。
图示:
top+-----+ | | | 3 | +-----+ | | | 2 | +-----+ | |
bottom| 1 | +-----+
在这个栈的示例中,元素1、2、3依次被推入栈顶。当元素3被推入时,元素1和2仍然在栈中,但它们现在处于元素3的下方。如果我们要从栈中删除一个元素,元素3将会首先被删除,然后是元素2和1。这就是后进先出(LIFO)的原则。
Java示例:
在Java中,可以使用java.util.Stack类来实现栈。以下是一个简单的示例:
import java.util.Stack;public class StackExample {public static void main(String[] args) {Stack<Integer> stack = new Stack<>();stack.push(1); // 压入元素1stack.push(2); // 压入元素2stack.push(3); // 压入元素3System.out.println("Initial Stack: " + stack); // 打印初始栈System.out.println("Popped element: " + stack.pop()); // 弹出顶部元素并打印System.out.println("Stack after pop operation: " + stack); // 打印执行弹出操作后的栈}
}
在这个示例中,我们首先创建了一个整数类型的栈,然后将元素1、2、3压入栈中。然后我们打印出初始的栈,执行弹出操作并打印出弹出的元素,最后再次打印出执行弹出操作后的栈。
二,添加数据
在Java中,我们可以使用java.util.Stack类来实现栈数据结构。以下是添加数据(压入元素)的示例:
import java.util.Stack;public class StackExample {public static void main(String[] args) {Stack<Integer> stack = new Stack<>();// 添加元素到栈stack.push(1);stack.push(2);stack.push(3);// 打印栈System.out.println("Initial Stack: " + stack);}
}
在这个示例中,我们首先导入了java.util.Stack类。然后,在main方法中,我们创建了一个整数类型的栈实例stack。我们使用push方法向栈中添加元素。最后,我们打印出初始的栈。
请注意,尽管java.util.Stack类是Java早期版本提供的,但现在并不推荐使用它。在多线程环境中,它的性能可能会有问题。在Java的后续版本中,建议使用java.util.Deque接口的实现,如java.util.ArrayDeque,来代替java.util.Stack。以下是使用ArrayDeque实现栈的示例:
import java.util.ArrayDeque;
import java.util.Deque;public class StackExample {public static void main(String[] args) {Deque<Integer> stack = new ArrayDeque<>();// 添加元素到栈stack.push(1);stack.push(2);stack.push(3);// 打印栈System.out.println("Initial Stack: " + stack);}
}
在这个示例中,我们使用了java.util.ArrayDeque类来实现栈。与上面的示例类似,我们使用push方法向栈中添加元素,并打印出初始的栈。
三,删除数据
在Java中,我们可以使用java.util.Stack类来实现栈数据结构。以下是删除数据(弹出元素)的示例:
import java.util.Stack;public class StackExample {public static void main(String[] args) {Stack<Integer> stack = new Stack<>();// 添加元素到栈stack.push(1);stack.push(2);stack.push(3);// 打印初始栈System.out.println("Initial Stack: " + stack);// 删除元素(弹出)System.out.println("Popped element: " + stack.pop());// 打印执行弹出操作后的栈System.out.println("Stack after pop operation: " + stack);}
}
在这个示例中,首先导入了java.util.Stack类。然后,在main方法中,创建了一个整数类型的栈实例stack。使用push方法向栈中添加元素。然后,使用pop方法删除(弹出)栈顶的元素。最后,打印出执行弹出操作后的栈。
请注意,尽管java.util.Stack类是Java早期版本提供的,但现在并不推荐使用它。在多线程环境中,它的性能可能会有问题。在Java的后续版本中,建议使用java.util.Deque接口的实现,如java.util.ArrayDeque,来代替java.util.Stack。以下是使用ArrayDeque实现栈的示例:
import java.util.ArrayDeque;
import java.util.Deque;public class StackExample {public static void main(String[] args) {Deque<Integer> stack = new ArrayDeque<>();// 添加元素到栈stack.push(1);stack.push(2);stack.push(3);// 打印初始栈System.out.println("Initial Stack: " + stack);// 删除元素(弹出)System.out.println("Popped element: " + stack.pop());// 打印执行弹出操作后的栈System.out.println("Stack after pop operation: " + stack);}
}
在这个示例中,使用了java.util.ArrayDeque类来实现栈。与上面的示例类似,使用push方法向栈中添加元素,并使用pop方法删除(弹出)栈顶的元素。最后,打印出执行弹出操作后的栈。
相关文章:
数据结构:栈
文章目录 栈一,概述二,添加数据三,删除数据 栈 一,概述 栈(Stack)是一种特殊的线性表,它只允许在一端进行插入和删除操作,通常被称为“后进先出”(Last In First Out&a…...
每日刷题-6
目录 一、选择题 二、算法题 1.Fibonacci数列 2.合法括号序列判断 一、选择题 1、 解析:内联函数是一种可以提高函数执行效率的方法,它的原理是编译时在函数调用点直接展开函数体的代码,从而避免了函数调用的开销。 但是,内联函…...
systrace使用注意事项
打开systrace文件报错:Unable to select a master clock domain because no path can be found from “SYSTRACE” to “LINUX_FTRACE_GLOBAL”. 使用systrace生成的trace.html文件无法打开,或者报上面的错误,可以选择下面这个方式࿱…...
RockyLinux9.2 网卡配置和nmcli、nmtui命令的使用
NetworkManager NetworkManager 是一个标准的Linux网络配置工具套件,支持服务器,也支持桌面环境, 发展到如今,绝大多数流行的发行版都支持它。 这套网络配置工具适用于 Rocky Linux 8 及更高版本。 nmcli是nm的命令行工具、nmt…...
Java线程池ThreadPoolExecutor应用(Spring Boot微服务)
记录:475 场景:在Spring Boot微服务中使用Java线程池ThreadPoolExecutor。实现Runnable接口提交线程任务到线程池。 版本:JDK 1.8,Spring Boot 2.6.3。 1.使用注解配置线程池ThreadPoolExecutor (1)说明 ThreadPoolExecutor,…...
QT5|C++|通过信号槽机制实现进度条更新
背景:最近在写一个删除90天数据显示进度的功能,实现思路是:通过信号槽捕获当前进度值实现。 备注:点击start按钮,开始更新进度条,直到100(每隔1s进行更新)举个栗子: 1、…...
什么是智能推荐?智能推荐的原理是什么?
一、智能推荐的魔力 2020年的愚人节晚间,罗永浩在抖音带货,相信你也被刷屏了吧。3小时的直播过程中,22款产品轮番出场,最终首播支付交易总额突破1.1亿、整场直播观看总人数超过4800万、总销售件数逾91万,粉丝打赏音浪…...
Windows下的Elasticsearch-head安装
Windows下的Elasticsearch-head安装 参考:https://gitcode.net/mirrors/mobz/elasticsearch-head 需要用到 npm 命令,这里可以提前下载安装下Node.js 即可自动安装npm; Node.js 下载安装地址:https://nodejs.org/en/download # 进…...
两台服务器间进行文件传输
目录 方法1:使用SCP 方法2:使用rsync 使用SSH密钥 两台服务器之间进行文件传输通常可以使用SCP(Secure Copy Protocol)或rsync命令。这两种方法都是在UNIX和Linux系统上常用的工具,用于安全地复制文件和目录。以下是…...
研究生选控制嵌入式还是机器视觉好?
研究生选控制嵌入式还是机器视觉好? 我是嵌入式/硬件方向转的算法,现在是公司的算法负责人,如果再让我选一次,我是不会再选嵌入式方 向,嵌入式如果只做技术是没前途的。 你要是有一定自学能力,能自己在学校…...
SecureCRT SSH与FTP连接中文乱码
1、首先要保证服务端环境变量是UTF-8编码的 LANG”zh_CN.UTF-8″ 2、会话里面配置好字符编码:UTF-8 SSH会话的窗口就可以正常显示中文了,效果如下 3、打开FTP或者SFTP时进行文件传输时,列表窗口里面还是乱码,需要把SecureCRT安…...
OSI七层网络参考模型与数据流通过程
OSI七层网络参考模型 文章目录 OSI七层网络参考模型1. OSI参考模型初步了解2. OSI参考模型理解3. 数据流通的过程 1. OSI参考模型初步了解 OSI,英文为Open System Interconnect,意为开放式系统互连,国际化标准组织(ISO)指定了OSI模型&#x…...
数字孪生行业相关政策梳理--工业领域相关政策(可下载)
自2021年国家“十四五”规划纲要提出“探索建设数字孪生城市”以来,国家发展和改革委员会、工业和信息化部、住房和城乡建设部、水利部、农业农村部等部门纷纷出台政策,大力推动数字孪生在千行百业的落地发展。这些政策不仅为数字孪生的应用提供了广阔的…...
【工具】咸鱼之王辅助小助手来了!
自动答题的视频演示:【工具】咸鱼之王辅助小助手来了!_哔哩哔哩_bilibili 刚开始搞,还没来得及做界面,目前只做了自动答题。 欢迎感兴趣的大佬一起来开发~...
黑马JVM总结(十)
(1)直接内存_基本使用 下面我们看一下使用了ByteBuffer直接内存,大文件的读写效率是非常的高 Java本身并不具备磁盘读写的能力,它需要调用操作系统的函数,需要从java的方法内部调用本地方法操作系统的方法,…...
JPEG、GIF动图可以转换成SVG、Eps格式的矢量图吗?
在进行图片设计的过程中,我们可能需要很多不同格式的图片,例如 JPG、PNG、BMP 和 GIF 位图图像,怎么将这些图片转换成矢量图呢?一款功能强大的应用程序,能够轻松将位图图片转换成矢量图输出。Vector Magic会帮你进行自…...
数据结构与算法的力量:编写更高效的代码
文章目录 为什么数据结构和算法重要?1. 提高性能2. 节省资源3. 解决复杂问题4. 改进代码质量 常见数据结构和算法数据结构1. 数组(Array)2. 链表(Linked List)3. 栈(Stack)4. 队列(Q…...
Python批量统计pdf中“中文”字符的个数
之前的文章提供了批量识别pdf中英文的方法,详见【python爬虫】批量识别pdf中的英文,自动翻译成中文上。以及自动pdf英文转中文文档,详见【python爬虫】批量识别pdf中的英文,自动翻译成中文下。以及Python统计pdf中英文单词的个数。 本文实现Python统计pdf中中文字符的…...
LeetCode的第 363 场周赛——记录+补题
研究生生涯第一次打力扣周赛——3题 1. 计算 K 置位下标对应元素的和 class Solution { public:int cnt(int x){int sum 0;while (x) {sum ((x%2)?1:0);x/2;}return sum;}int sumIndicesWithKSetBits(vector<int>& nums, int k) {int n nums.size();int ans 0…...
【网络协议】Http-上
Http请求结构: 结构图1: 实验解析请求报文: 1.在Edge浏览器上输入ip地址端口号文件资源,也就是下图中的120.XX.139.29:8888/A/B/c.html 2.我的程序接收到了一个没有有效载荷的http请求(呼应上面的结构图1),如下 GET …...
日志分散难管理?用Visual Syslog Server实现企业级日志集中监控的5个实战方案
日志分散难管理?用Visual Syslog Server实现企业级日志集中监控的5个实战方案 【免费下载链接】visualsyslog Syslog Server for Windows with a graphical user interface 项目地址: https://gitcode.com/gh_mirrors/vi/visualsyslog 痛点诊断:日…...
手把手教你用Python打造一个简易图片颜色替换工具(含Tkinter GUI界面)
用Python和Tkinter构建智能图片颜色替换工具:从零到一的完整开发指南 在数字图像处理领域,颜色替换是一个基础但极其实用的功能。想象一下,你有一张产品照片需要快速调整主色调,或者需要将证件照的背景色统一更换——传统方式可能…...
ABC系统实战指南:逻辑综合与形式验证的数字电路设计工具
ABC系统实战指南:逻辑综合与形式验证的数字电路设计工具 【免费下载链接】abc ABC: System for Sequential Logic Synthesis and Formal Verification 项目地址: https://gitcode.com/gh_mirrors/ab/abc 在现代数字电路设计流程中,逻辑综合与形式…...
重新定义数据标注:Label Studio如何让AI训练效率提升300%?
重新定义数据标注:Label Studio如何让AI训练效率提升300%? 【免费下载链接】label-studio Label Studio is a multi-type data labeling and annotation tool with standardized output format 项目地址: https://gitcode.com/GitHub_Trending/la/labe…...
Realtek RTL8125 2.5GbE网卡驱动安装与优化全指南:从识别到调优的完整解决方案
Realtek RTL8125 2.5GbE网卡驱动安装与优化全指南:从识别到调优的完整解决方案 【免费下载链接】realtek-r8125-dkms A DKMS package for easy use of Realtek r8125 driver, which supports 2.5 GbE. 项目地址: https://gitcode.com/gh_mirrors/re/realtek-r8125…...
Windows 10/11 下用 Anaconda 和 Hadoop 3.3.6 搞定 PySpark 环境,附赠 Winutils 下载避坑指南
Windows 10/11 下用 Anaconda 和 Hadoop 3.3.6 搞定 PySpark 环境,附赠 Winutils 下载避坑指南 在 Windows 系统上搭建 PySpark 开发环境,对于数据科学家和开发者来说既是一个必经之路,也是一场充满挑战的冒险。不同于 Linux 或 macOS 系统&a…...
科研加速器:GLM-4.7-Flash驱动OpenClaw自动整理文献综述
科研加速器:GLM-4.7-Flash驱动OpenClaw自动整理文献综述 1. 为什么需要自动化文献整理 作为每天需要阅读十几篇论文的科研工作者,我发现自己至少有30%的时间花在了机械性劳动上——下载PDF、重命名文件、提取关键结论、整理参考文献格式。这些工作虽然…...
OpenClaw多用户方案:QwQ-32B共享环境下的权限隔离
OpenClaw多用户方案:QwQ-32B共享环境下的权限隔离 1. 为什么需要多用户方案? 去年我在家里搭建了一个OpenClaw自动化环境,原本只是个人使用。直到某天家人看到我用语音指令让AI自动整理照片、生成周报后,纷纷要求"共享&quo…...
8255A工作方式0实战:手把手教你用汇编语言驱动八路抢答器LED与数码管
8255A工作方式0实战:从零构建八路抢答器驱动框架 记得第一次在实验室见到8255A芯片时,那块黑色的DIP封装器件看起来平平无奇,直到它让八颗LED随着我的汇编指令跳起"灯光芭蕾"。本文将带你深入这个经典可编程并行接口芯片的实战应用…...
20吨燃气蒸汽锅炉实力厂家/支持上门安装调试
燃气蒸汽锅炉,认准源头实力厂家,不仅能买到品质过硬的设备,更能享受到省心便捷的上门安装调试服务,免去自行安装的繁琐与隐患,让设备快速投入平稳运行。我们作为深耕锅炉制造行业的实力厂家,具备正规生产资…...
