时间:2021-05-20
stack,中文翻译为堆栈,其实指的是栈,heap,堆。这里讲的是数据结构的栈,不是内存分配里面的堆和栈。
栈是先进后出的数据的结构,好比你碟子一个一个堆起来,最后放的那个是堆在最上面的。
队列就是排队买苹果,先去的那个可以先买。
栈
其实还是觉得设置top为-1好计算一点,记住这里的i++和++i,如果i=1,那么array[i++]=2,指的是array[1]=2,下次用到i的时候i的值才会变2,而++i就是直接使用i=2。
top指向0,因为每次都push一个元素加一,那么添加到最后一个元素的时候top=max。由于先进后出,那么先出的是最后进的,刚刚为top-1所在的位置。
正确输出:
5
5
5
3
1
一、栈的使用——单词逆序。
将Stack的数组类型改为char即可。
读取输入也可以用IO读取。
public static void main(String[] args) { InputStreamReader is = new InputStreamReader(System.in); BufferedReader b = new BufferedReader(is); String string=""; try { string = b.readLine(); } catch (IOException e) { e.printStackTrace(); } Stack st = new Stack(string.length()); System.out.println(st.reverse(string)); }二、栈的使用——分隔符匹配。
public int charat(char c){ for (int i = 0; i < array.length; i++) { if(c == array[i]) return i; } return array.length; } public void match(String in){ String out=""; for (int i = 0; i < in.length(); i++) { char c = in.charAt(i); if(c == '{' || c == '(' || c == '[' ){ push(c); } if(c == '}' || c == ')' || c == ']'){ char temp = pop(); if(c == '}' && temp != '{'|| c == ')' && temp != '('|| c == ']' && temp != ']'){ System.out.println("can not match in "+i); } } } while(!isEmpty()){ char c = pop(); if(c == '{'){ System.out.println("insert } to match "+charat(c)); } if(c == '[' ){ System.out.println("insert ] to match "+charat(c)); } if(c == '(' ){ System.out.println("insert ) to match "+charat(c)); } } } public static void main(String[] args) { Scanner s = new Scanner(System.in); String string = s.nextLine(); Stack st = new Stack(string.length()); st.match(string); } result: klsjdf(klj{lkjjsdf{) can not match in 19 insert } to match 1 insert ) to match 0将({[先压入栈,一旦遇到)}]便与弹出的元素比较,若吻合,则匹配。如果一直没有)}],最后便会弹出栈的左符号,提示是在具体哪个位置,缺少的具体的右符号类型。
这是可以用栈来实现的工具。
栈中数据入栈和出栈的时间复杂度为常数O(1),因为与数据个数无关,直接压入弹出,操作时间短,优势便在这里,如果现实生活的使用只需用到先进后出的顺序而且只用到进出数据的比较,那就可以使用栈了。
以上所述是小编给大家介绍的Java数据结构与算法之栈(动力节点Java学院整理),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
java数据结构之栈与队列一:对列队列是一种先进先出的数据结构实现代码:packageQueue;/**使用java构建队列,并模拟实现队列的入队和出对方法*/
本文实例讲述了java数据结构与算法之noDups去除重复项算法。分享给大家供大家参考,具体如下:publicstaticvoidnoDupa(int[]a){
本文实例讲述了Java数据结构之栈的基本定义与实现方法。分享给大家供大家参考,具体如下:一、概述:1、基本概念:栈是一种数据结构,是只能在某一端插入和删除的特殊
本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点:栈的抽象数据类型顺序栈的设计与实现链式栈的设计与实现栈的应用
Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类:枚举(Enumeration)位集合(BitSet)向量(Vector)栈(