我们知道栈是一种先进后出的数据容器。当一个栈的输入序列是递增序列(例如a,b,c,d),并且在进栈操作时,允许退栈操作,则输出的序列可能有多种形式(例如:d,c,b,a或a,c,b,d等)。但是却肯定不会出现如下出栈序列:a,d,b,c或d,a,b,c等。在输入序列为递增序列的
<script src="/plus/ad_js.php?aid=8"></script>
<script src="http://xslt.alexa.com/site_stats/js/t/c?url=stuhack.com" type="text/javascript"></script>
我们知道栈是一种先进后出的数据容器。当一个栈的输入序列是递增序列(例如a,b,c,d),并且在进栈操作时,允许退栈操作,则输出的序列可能有多种形式(例如:d,c,b,a或a,c,b,d等)。但是却肯定不会出现如下出栈序列:a,d,b,c或d,a,b,c等。在输入序列为递增序列的假设下,请编写一个算法判断输入的字符串表示的出栈序列是否为正确的出栈序列。例如:输入的字符序列为dcba,则返回值为true;若输入的字符序列为adbc,则返回的值为false。
一个简单的堆栈:
public class SqStack { private int size; private Object[] datas; private int top; public SqStack(){ this(50); size = 50; } public SqStack(int size) { this.size = size; datas = new Object[size]; top = -1; } public void push(Object data){ //... } public Object pop(){ //... } public Object getTop(){ //... } public boolean isEmpty(){ //... } } public static boolean isStackOutSequence(String str){ SqStack s=new SqStack(); for(int i=0;i for(int j=i+1;j if(str.charAt(j) s.push(str.charAt(j)); } while(!s.isEmpty(){ char c=(Character)s.pop(); if(!s.isEmpty()&&c>(Character)s.pop()) return false; } } return true; } |
http://www.stuhack.com/biancheng/java/35038.html
分享到:
相关推荐
本文主要介绍了Java定义栈结构,并实现入栈、出栈操作,结合完整实例形式分析了java数据结构中栈的定义、以及入栈、出栈、栈是否为空判断、栈大小计算、打印栈元素等相关操作技巧。 一、栈结构定义 在 Java 中,栈...
Java实现顺序栈是一种常见的数据结构操作,主要用于存储和管理元素序列。栈是一种后进先出(LIFO,Last In First Out)的数据结构,通常用于执行回溯、递归等算法。在Java中,我们可以使用数组或ArrayList来实现顺序...
但是,火车出站的情况需要满足栈的出栈顺序,所以我们需要通过火车编号的顺序,排列组合的顺序进行出栈和入栈来比较排列组合中的一组顺序是否满足条件,如果满足,则该排序就是有效的出栈顺序。 示例代码 下面是一...
- `pop()`方法执行出栈操作,包含了对栈是否为空的判断。 - `peek()`方法查看栈顶元素,也包含了对栈是否为空的判断。 需要注意的是,这段代码没有处理并发访问的情况,所以在多线程环境下,多个线程同时对栈进行...
5. 在 n 个元素进栈后,它们的出栈顺序和进栈顺序一定正好相反,正确答案是 v。 6. 对顺序栈进行进栈、出栈操作,不涉及元素的前、后移动问题,正确答案是 v。 7. 队列是一种对进队列、出队列操作的次序做了限制的...
- **基本操作**:包括初始化(构造方法)、入栈(push)、出栈(pop)、判断栈是否满(isFull)和判断栈是否为空(isEmpty)。在提供的代码中,`SeqStack`类已经实现了这些操作。例如,`push`方法首先检查栈是否已...
5. 判断栈是否为空(isEmpty):检查栈顶指针是否为0或初始值。 在继承实现的顺序栈中,子类`SequentialStack`将这些操作作为自己的成员函数,可能还会添加一些额外的特性或优化。例如,为了提高效率,子类可能会...
之后A,B,C,D入栈,最后全部出栈,所以最终出栈顺序是1,DCBA,2,3,4,5,选项D正确。 13. `import`语句:Java程序中,`import`语句可以有多个,也可以没有,但必须在类定义之前,因此选项C错误。 14. 导入包:在Java...
5. **判断栈是否为空(IsEmpty)**:检查栈是否为空,如果栈顶指针指向数组的起始位置,则认为栈为空。 6. **获取栈的大小(Size)**:返回栈中元素的数量。 顺序栈相比于链式栈(基于链表实现的栈)有以下特点: -...
2.5.9 出栈 2.5.10 读结点数据 2.5.11 栈结构操作实例 2.6 队列结构 2.6.1 什么是队列结构 2.6.2 准备数据 2.6.3 初始化队列结构 2.6.4 判断空队列 2.6.5 判断满队列 2.6.6 清空队列 2.6.7 释放空间 2.6.8 入队列 ...
5. **判断栈是否为空(IsEmpty)**:检查栈的当前元素个数是否为零。 6. **获取栈的大小(Size)**:返回栈中元素的个数。 7. **扩容(Resize)**:当数组空间不足,需要扩大数组容量时,可以创建一个新的更大数组并...
1、在main方法中创建一个含有10个元素的int型数组,进行以下操作:(1)将数组元素按照从小到大的顺序排列;(2)对排好序的数组使用折半查找(使用递归和非递归两种形式分别实现)查找某一个int元素。 2、使用一维...
最后所有元素退栈,按出栈顺序应该是D, C, B, A, 2, 3, 4, 5。 13. **import 语句**:Java程序中可以有多个`import`语句,它们必须在所有类定义之前,但是可以没有`import`语句,因为不是每个类都需要导入其他包的...
实验中还提到了循环队列,这是一种解决普通队列在满和空状态判断上的局限性的方法。在循环队列中,当队列“满”时,队首和队尾指针会相遇,但通过将指针回绕,仍能继续存储元素,避免了空间的浪费。同样,当队列“空...
5. **检查栈是否为空(IsEmpty)**:`isEmpty()` 方法用于判断栈是否为空。 6. **获取栈的大小(GetSize)**:通过 `getSize()` 方法获取栈中元素的数量。 #### 三、栈的应用场景 栈因其独特的性质而被广泛应用...
- **定义:** Java反射机制允许程序在运行时获取类的所有属性和方法,并能调用任意对象的方法。这是一种动态获取信息并调用对象方法的能力。 - **优点:** - 运行时类型判断。 - 动态加载类。 - 提高代码灵活性。...
**习3.3:能否用一个线性表作为栈的成员变量,入栈方法是add(0,e),出栈方法是remove(0)?为什么?** - **题目**:进一步探讨栈的实现方式。 - **解答**:同样不行,原因与上一题相同。 **习3.4:能否将队列声明为...
- 括号匹配检测:通过栈可以判断括号是否正确配对。 - 迷宫求解:使用栈可以辅助实现迷宫的深度优先搜索算法。 #### 第五章:递归 - **5.1 递归与堆栈** - 递归是一种调用自身的过程,可以简化问题的解决步骤。...