你说的这个情况应该是以数组和棧构成顺序栈的情况下的
一个数组和栈以数组和栈底为栈底而栈顶时钟标志是始终操作栈顶元素的。也就是说你要压栈,必须先把栈頂标志加一之后才能写入你要弹栈需要先读出再把栈顶标志减一。
那么栈为空的时候标志肯定不能是0,因为它标志着栈顶元素是数组囷栈的第一个值这样代表栈里是有一个元素的。所以top是-1的时候它才是空栈,写入的时候要先加一指向数组和栈第一个空间了才能写
這样一想你就应该知道为什么top是-1时候代表栈空了
你对这个回答的评价是?
你说的这个情况应该是以数组和棧构成顺序栈的情况下的
一个数组和栈以数组和栈底为栈底而栈顶时钟标志是始终操作栈顶元素的。也就是说你要压栈,必须先把栈頂标志加一之后才能写入你要弹栈需要先读出再把栈顶标志减一。
那么栈为空的时候标志肯定不能是0,因为它标志着栈顶元素是数组囷栈的第一个值这样代表栈里是有一个元素的。所以top是-1的时候它才是空栈,写入的时候要先加一指向数组和栈第一个空间了才能写
這样一想你就应该知道为什么top是-1时候代表栈空了
你对这个回答的评价是?
原标题:数组和栈实现栈数据结構的几种方法
栈是Java语言中最重要的数据结构之一它的实现,至少应该包括以下几个方法:
1.pop()出栈操作弹出栈顶元素。
另外实现一个栈,还应该考虑到几个问题:
1.栈的初始大小以及栈满以后如何新增栈空间
2.对栈进行更新时需要进行同步
简单示例使用数组和栈实现栈,代碼如下:
//Java不支持泛型数组和栈如需使用,请使用Java提供的容器
//如果栈满则创建空间为当前栈空间两倍的栈
最后说明,Java中实现了栈(java.util.Stack)的數据结构它是通过继承Vector类实现的,一般情况下我们直接拿来用就行了
想要了解Java编程的朋友,关注我每天都会更新Java资源、资讯。
思路:使用两个队列实现其中┅个队列为空,用来进行颠倒顺序和输出队尾元素
入栈操作: 向非空队列内入队即可
出栈操作:将非空队列除队尾元素外的所有元素导叺另一个空队列,剩余队尾元素即为待应该待出栈元素
top()操作: 同出栈注意只需访问返回,不需要让其出队即仍需将其导入另一队列
注意:两队列地位平等,均可能用作储存和转移工作
两个堆栈s1负责入队,s2负责反向并出队
每次入队直接进入s1出队操作先将s1所有元素压入s2,则栈顶元素即为待出队元素出队后压回s1,恢复原状
要求:实现可以返回最小元素的栈
思路:使用两个栈,一个栈s1正常出入另一个儲s2存最小值信息,当当前元素比s2栈顶元素小入当前元素,否则再入一份栈顶元素
注意:由于s1,s2元素一样多出栈时也应一起出栈。
思路:遍历序列遇到所有类型左括号,入栈;遇到右括号判定栈顶元素与之是否匹配,匹配则出栈不匹配则说明整体不匹配
思路:根据逆波兰表达式定义,建立栈
遍历字符串遇到数字,入栈遇到运算符,取出栈顶两元素执行相应计算后将结果入栈
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。