题目:
题目:输入两个整数序列。其中一个序列表示栈的push顺序,
判断另一个序列有没有可能是对应的pop顺序。
为了简单起见,我们假设push序列的任意两个整数都是不相等的。
比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。
因为可以有如下的push和pop序列:
push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,
这样得到的pop序列就是4、5、3、2、1。
但序列4、3、5、1、2就不可能是push序列1、2、3、4、5的pop序列。
代码:
注释掉的事开始写的,后来优化了下下~
毕竟双从循环不好看
public class StackJudge {
public static void Judge(int[] pushSeq, int[] popSeq){
int[] stack = new int[pushSeq.length];
int count = pushSeq.length;
int len = pushSeq.length;
int push_index = 0;
int pop_index = 0;
int stack_tail = -1;
while(count>0){
if(push_index<len&&pushSeq[push_index]==popSeq[pop_index]){
System.out.print(" Push "+pushSeq[push_index]);
System.out.print(" Pop "+popSeq[pop_index]);
push_index++;
pop_index++;
count--;
}else if(push_index==len){
if(stack[stack_tail]==popSeq[pop_index]){
System.out.print(" Pop "+stack[stack_tail]);
stack_tail--;
pop_index++;
count--;
}else{
count=0;
System.out.println("\nNo");
}
}
else{
System.out.print(" Push "+pushSeq[push_index]);
stack[push_index] = pushSeq[push_index];
push_index++;
stack_tail++;
}
// if(push_index==len){
// while(count>0){
// if(stack[stack_tail]==popSeq[pop_index]){
// System.out.print(" Pop "+stack[stack_tail]);
// stack_tail--;
// pop_index++;
// count--;
// }else{
// count=0;
// System.out.println("\nNo");
// }
// }
// }
}
}
public static void main(String[] args){
int[] seq1 = {1, 2, 3, 4, 5};
int[] seq2 = {4 ,5, 3, 2, 1};
Judge(seq1, seq2);
}
}
分享到:
相关推荐
它的主要操作包括压入(Push,将元素添加到栈顶)和弹出(Pop,移除栈顶元素)。在判断回文中,栈可以用来存储字符串的一半,然后逐一比较另一半的字符与栈顶的字符,若都相等,则为回文。 接着,我们了解队列...
首先,栈(Stack)是一种后进先出(Last In First Out, LIFO)的数据结构,其操作主要包含两个基本操作:压入(Push)和弹出(Pop)。压入是将元素添加到栈顶,而弹出则是移除栈顶的元素。栈常被用来处理递归、...
- **条件判断**:在push或pop之前进行一些条件检查,根据业务逻辑决定是否执行操作。 - **数据传递**:可能提供了一种更方便的方式在push或pop时传递数据给目标视图控制器。 - **错误处理**:如果在push或pop过程...
在C语言中,可以利用数组模拟栈和队列,通过push和pop操作实现这一过程。 2. **赫夫曼数**: 赫夫曼编码(Huffman Coding)是一种用于无损数据压缩的算法,其核心思想是建立一棵具有最小带权路径长度的二叉树,...
栈的操作主要有两个:入栈(push)和出栈(pop)。此外,还有查看栈顶元素但不移除的 peek 操作以及检查栈是否为空的 isEmpty 操作。 利用栈判断回文串的算法步骤如下: 1. 初始化一个空栈。 2. 遍历输入字符串的...
### 使用栈判断括号是否匹配 #### 背景与目的 在计算机科学中,括号匹配问题是一个经典的算法问题,通常用于验证编程语言中的代码结构是否正确。本篇文章将介绍如何利用栈(Stack)这一数据结构来解决括号匹配问题...
其中,InitStack函数用于初始化栈,DestroyStack函数用于销毁栈,ClearStack函数用于清空栈,StackEmpty函数用于判断栈是否为空,GetTop函数用于获取栈顶元素,Push函数用于将元素压入栈,Pop函数用于将元素弹出栈。...
栈的操作主要包括压栈(Push)、弹栈(Pop)、查看栈顶元素(Peek)以及判断栈是否为空(IsEmpty)。在实际应用中,栈广泛用于表达式求值、括号匹配、递归调用、内存管理等多种场景。本话题将重点讨论如何建立栈以及...
栈的操作包括进栈(Push)和退栈(Pop)。进栈时,元素被添加到栈的顶部,而退栈时,元素从栈的顶部被取出。 栈的操作 栈的操作包括: * 进栈(Push):将元素添加到栈的顶部。 * 退栈(Pop):从栈的顶部取出...
5. **栈操作序列实例**:对于输入序列为123…n的情况,若要使输出序列为CBA(输入序列为ABC),则需要进行的操作序列为`push, push, push, pop, pop, pop`(选项B)。这是因为在栈中压入所有元素后再依次弹出可以...
Hui.java可能是实现栈的辅助类,它可能包含了栈操作的定义,如压栈(push)和弹栈(pop)等方法。例如: ```java public class Hui { private char[] stack; private int top; public Hui(int size) { stack =...
InitStack函数用于初始化栈,Push函数用于将元素入栈,Pop函数用于将元素出栈,StackeEmpty函数用于判断栈是否为空。 在实现括号配对的判断逻辑中,我们可以使用栈来存储括号,并判断括号之间的匹配关系。例如,在...
这样,我们就可以在程序中实现栈的基本操作:push(压栈)、pop(弹栈)、isEmpty(判断栈是否为空)和isFull(判断栈是否已满)。 接下来,我们将这个思路应用于HTML文件的括号匹配。HTML文件中常见的括号有`和`>`...
描述中提到的实验目的是让学生掌握栈的两种实现方式,特别是栈空和栈满的判断条件,以及理解栈空间共享的概念及其实现方法。实验内容是设计一个程序,通过数组创建两个栈,输入一序列整数,将奇数存入第一个栈,偶数...
通过本实验,旨在熟悉栈和队列的各项操作,区别栈和队列的操作原理,并学习如何使用栈和队列来判断回文序列。 二、实验内容 本实验的主要内容是使用栈和队列来判断回文序列。回文序列是指正读和反读都一样的字符...
根据给定文件的信息,本文将围绕“如何使用C++中的栈结构来判断一个字符串是否为回文”这一主题展开详细讨论。首先,我们会对回文的概念进行简要介绍,并解释为何栈这种数据结构适合用于回文检测。接着,我们将深入...
栈的基本操作包括初始化、入栈(push)、出栈(pop)、查看栈顶元素(top)和判断栈是否为空(isEmpty)。这些操作都需要确保不越界,以避免非法访问。 接着,我们讨论如何使用栈来“判断输入的字符串中的括号是否...