首页/新闻资讯/正文详情

JAVA数据结构与算法:栈

发布时间:2026/11/15 19:15:37 来源:云帆数科 栏目:资讯中心
JAVA数据结构与算法:栈
栈栈⼀种特殊的线性表其只允许在固定的⼀端进⾏插⼊和删除元素操作。进⾏数据插⼊和删除操作的⼀端称为栈顶另⼀端称为栈底。栈中的数据元素遵守后进先出LIFOLast In First Out的原则。压栈栈的插⼊操作叫做进栈/压栈/⼊栈⼊数据在栈顶出栈栈的删除操作叫做出栈出数据在栈顶栈的使用方法功能Stack()构造一个空的栈E push(E e)将e入栈并返回eE pop()将栈顶元素出栈并返回E peek()获取栈顶元素int size()获取栈中有效元素个数boolean empty()检测栈是否为空栈的模拟实现栈的接口publicinterfaceStackInterface{// 入栈voidpush(intval);// 出栈返回栈顶元素空栈抛异常intpop();// 获取栈顶元素不弹出intpeek();// 判断栈是否为空booleanisEmpty();// 获取当前栈中元素个数intsize();// 清空栈voidclear();// 判断是否包含指定元素booleancontains(intval);}将元素压入栈publicvoidpush(intval){// 如果栈已满则扩容为原来的2倍if(isFull()){arrArrays.copyOf(arr,arr.length*2);}// 将元素放入栈顶并更新栈顶指针arr[top]val;}弹出栈顶元素publicintpop(){if(isEmpty()){thrownewEmptyStackException();}// 获取栈顶元素值并将栈顶指针下移intvalarr[top-1];top--;returnval;}获取栈顶元素publicintpeek(){if(isEmpty()){thrownewEmptyStackException();}returnarr[top-1];}检查栈是否已满publicbooleanisFull(){returntoparr.length;}检查栈是否为空publicbooleanisEmpty(){returntop0;}获取栈中元素的数量publicintsize(){returntop;}检查栈中是否包含某个值publicbooleancontains(intval){// 遍历栈中的元素for(inti0;itop;i){if(arr[i]val){returntrue;}}returnfalse;}栈模拟实现完整代码数组栈packageDataStructure.DS_Stack;importjava.util.Arrays;importjava.util.EmptyStackException;/** * MyStack类实现了栈接口StackInterface使用数组实现栈的基本功能 */publicclassMyStackimplementsStackInterface{// 使用数组存储栈元素privateint[]arr;// 栈顶指针指向下一个插入位置privateinttop;/** * 构造函数初始化一个容量为10的空栈 */publicMyStack(){this.arrnewint[10];top0;}/** * 将元素压入栈 * param val 要压入栈的整数值 */Overridepublicvoidpush(intval){// 如果栈已满则扩容为原来的2倍if(isFull()){arrArrays.copyOf(arr,arr.length*2);}// 将元素放入栈顶并更新栈顶指针arr[top]val;}/** * 检查栈是否已满 * return 如果栈已满返回true否则返回false */publicbooleanisFull(){returntoparr.length;}/** * 检查栈是否为空 * return 如果栈为空返回true否则返回false */OverridepublicbooleanisEmpty(){returntop0;}/** * 获取栈中元素的数量 * return 栈中元素的个数 */Overridepublicintsize(){returntop;}/** * 清空栈 */Overridepublicvoidclear(){top0;}/** * 检查栈中是否包含某个值 * param val 要查找的整数值 * return 如果栈中包含该值返回true否则返回false */Overridepublicbooleancontains(intval){// 遍历栈中的元素for(inti0;itop;i){if(arr[i]val){returntrue;}}returnfalse;}/** * 查看栈顶元素但不移除 * return 栈顶元素的值 * throws EmptyStackException 如果栈为空则抛出此异常 */Overridepublicintpeek(){if(isEmpty()){thrownewEmptyStackException();}returnarr[top-1];}/** * 弹出栈顶元素 * return 栈顶元素的值 * throws EmptyStackException 如果栈为空则抛出此异常 */Overridepublicintpop(){if(isEmpty()){thrownewEmptyStackException();}// 获取栈顶元素值并将栈顶指针下移intvalarr[top-1];top--;returnval;}}链栈packageDataStructure.DS_Stack;importjava.util.EmptyStackException;publicclassMyLinkedListStackimplementsStackInterface{staticclassListNode{publicintval;publicListNodenext;publicListNodepre;publicListNode(intval){this.valval;this.nextnull;this.prenull;}}ListNodeheadnull;ListNodetailnull;Overridepublicvoidpush(intval){ListNodenewNodenewListNode(val);if(isEmpty()){headnewNode;tailnewNode;}else{newNode.pretail;tail.nextnewNode;tailnewNode;}}Overridepublicintpop(){if(isEmpty()){thrownewEmptyStackException();}if(headtail){intdatahead.val;headnull;returndata;}intdatatail.val;tailtail.pre;tail.nextnull;returndata;}Overridepublicintpeek(){if(isEmpty()){thrownewEmptyStackException();}returntail.val;}OverridepublicbooleanisEmpty(){returnheadnull;}Overridepublicintsize(){if(headnull)return0;if(headtail)return1;ListNodecurhead;intlen0;while(cur!null){len;curcur.next;}returnlen;}Overridepublicvoidclear(){headnull;tailnull;}Overridepublicbooleancontains(intval){ListNodecurhead;while(cur!null){if(cur.valval){returntrue;}curcur.next;}returnfalse;}}

相关推荐

2025年C++静态分析技术突破:LLM如何实现精准检测与低误报
2025年C++静态分析技术突破:LLM如何实现精准检测与低误报

1. 项目概述:从“狼来了”到“火眼金睛”的进化在C开发的世界里,静态分析工具就像一位不知疲倦的代码审查员,它能在代码运行前就揪出潜在的错误。然而,长久以来,这位审查员一直背负着一个不太光彩的绰号——“狼来了”… · 2026/10/31 9:48:21

FastAPI:Python高性能Web开发实战指南
FastAPI:Python高性能Web开发实战指南

1. FastAPI为何能成为Python生态的扛把子第一次接触FastAPI是在2019年,当时正为一个电商平台重构支付网关接口。原本的Flask项目随着业务扩展变得臃肿不堪,类型检查全靠人工维护,直到在PyCon Asia听到TIANGOLO的分享。三周迁移完成后&#xf… · 2026/11/8 0:25:20

【claude code实践】让 Claude Code 分析慢查询:数据库性能问题的排查思路
【claude code实践】让 Claude Code 分析慢查询:数据库性能问题的排查思路

让 Claude Code 分析慢查询:数据库性能问题的排查思路 引言:为什么现在需要理解它 每个与数据库打过交道的开发者,大概都经历过这样的时刻:凌晨两点被报警叫醒,打开监控看到某条 SQL 执行时间从 50 毫秒飙升到 8 秒&am… · 2026/11/14 10:15:36

山西在哪里报考电工证 电工证考前押题怎么找
山西在哪里报考电工证 电工证考前押题怎么找

山西在哪里报考电工证 电工证考前押题怎么找 工地太忙根本没时间复习考试,这几乎是每个特种作业操作证持证人的通病。尤其像山西的电工证,虽然含金量高,但考试内容多、流程复杂,很多人一拖再拖。如果你也是那种“边干边学”的人,那这篇内容你得看完,里… · 2026/11/15 19:14:53

山东建委电工证图片丢了怎么补办电子证书
山东建委电工证图片丢了怎么补办电子证书

山东建委电工证图片丢了怎么补办电子证书 你是不是也遇到过这种情况,手里拿着山东建委电工证图片,结果不小心弄丢了,找遍了所有角落都找不到,一着急就想着找中介帮忙补办?但又怕被坑,不知道去哪报名、流程复杂不说,关键是担心花钱还办不了证。别急,今… · 2026/11/15 19:14:53

沭阳哪里有电工证培训通过率揭秘:怕考不过白交培训费的电工别再踩坑
沭阳哪里有电工证培训通过率揭秘:怕考不过白交培训费的电工别再踩坑

沭阳哪里有电工证培训通过率揭秘:怕考不过白交培训费的电工别再踩坑 怕考不过白交培训费?你不是一个人。我身边就有好几个电工作业的朋友,花了几千块报的电工证培训班,结果考试一塌糊涂,白白浪费了时间和金钱。尤其是对于刚入行的小伙伴,不知道怎么选培… · 2026/11/15 19:14:53

广州白云区有电工证吗真实经历告诉你怎么避坑
广州白云区有电工证吗真实经历告诉你怎么避坑

广州白云区有电工证吗真实经历告诉你怎么避坑 你是不是也像我一样,刚听说要考电工证,心里打鼓, 不知道去哪报名怕被中介坑 ?我之前在洛阳涧西区做公路工程,第一次听说要考电工证的时候,脑子里全是问号,连 广州白云区有电工证吗… · 2026/11/15 19:14:53

电工作业实操科目占比高到让你意外,含金量决定你能不能干这行
电工作业实操科目占比高到让你意外,含金量决定你能不能干这行

电工作业实操科目占比高到让你意外,含金量决定你能不能干这行 怕考不过白交培训费?电工作业考试中实操科目占比高达60%以上,这可不是危言耸听。很多人以为只要背会理论题就能过,结果一上实操就懵圈,培训费打水漂。别再以为这证好考,实操科目占比是真… · 2026/11/15 19:14:53

茂名低压电工证图片上岗必备,实操考试心里没底怕挂科
茂名低压电工证图片上岗必备,实操考试心里没底怕挂科

茂名低压电工证图片上岗必备,实操考试心里没底怕挂科 你是不是也和我一样,考茂名低压电工证之前心里直打鼓?实操考试一上手就紧张,怕挂科,怕耽误工作,怕被单位说不行?我理解这种心情,特别是对刚接触这个行业的新人来说,面对那些操作工具和考试流程,… · 2026/11/15 19:13:53

长春初级电工证怎么考?通过率揭秘全在这里
长春初级电工证怎么考?通过率揭秘全在这里

长春初级电工证怎么考?通过率揭秘全在这里 之前考的证在外省能不能转过来?这几乎是每个想从事电工工作的人都会问的问题。特别是那些在外地打拼多年、手里握着一张“外地电工证”的人,到了长春想继续干这一行,第一反应就是“我的证能用吗?”。今天我们就… · 2026/11/15 0:00:50

国内电工证报考条件与考试时间
国内电工证报考条件与考试时间

低压电工证怎么考?学历不高也能报名,官方报名入口全在这 你是不是经常听说“电工证是入行门槛”,但又担心自己学历不够、经验不足,根本报不了名?别急,今天就带你从零了解【国内电工证】的报考流程、考试内容,还有怎么在 官方报名入口… · 2026/11/15 0:00:50

电工作业时如何断电?电子证书到底能不能全国通用?
电工作业时如何断电?电子证书到底能不能全国通用?

电工作业时如何断电?电子证书到底能不能全国通用? 实操考试心里没底怕挂科,特别是电工作业时如何断电这一操作,不仅关系到你能不能拿到证书,更关系到以后能不能顺利上岗。很多人觉得这不过就是“断个电”,但其实这里面的门道可不少,稍有不慎就可能出错… · 2026/11/15 0:00:50

长春初级电工证怎么考?通过率揭秘全在这里
长春初级电工证怎么考?通过率揭秘全在这里

长春初级电工证怎么考?通过率揭秘全在这里 之前考的证在外省能不能转过来?这几乎是每个想从事电工工作的人都会问的问题。特别是那些在外地打拼多年、手里握着一张“外地电工证”的人,到了长春想继续干这一行,第一反应就是“我的证能用吗?”。今天我们就… · 2026/11/15 0:00:50

国内电工证报考条件与考试时间
国内电工证报考条件与考试时间

低压电工证怎么考?学历不高也能报名,官方报名入口全在这 你是不是经常听说“电工证是入行门槛”,但又担心自己学历不够、经验不足,根本报不了名?别急,今天就带你从零了解【国内电工证】的报考流程、考试内容,还有怎么在 官方报名入口… · 2026/11/15 0:00:50

电工作业时如何断电?电子证书到底能不能全国通用?
电工作业时如何断电?电子证书到底能不能全国通用?

电工作业时如何断电?电子证书到底能不能全国通用? 实操考试心里没底怕挂科,特别是电工作业时如何断电这一操作,不仅关系到你能不能拿到证书,更关系到以后能不能顺利上岗。很多人觉得这不过就是“断个电”,但其实这里面的门道可不少,稍有不慎就可能出错… · 2026/11/15 0:00:50

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/15 1:51:20

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/15 4:02:19

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/15 3:02:05

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码