题目:
题目:输入两个整数序列。其中一个序列表示栈的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);
}
}
分享到:
相关推荐
empty – 判断栈是否为空; query – 查询栈顶元素。 现在要对栈进行 M 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。 输入格式 第一行包含整数 M,表示操作次数。 接下来 M 行,每行包含一个操作命令...
1、熟练掌握栈和队列的基本操作在两种存储结构上的实现。 2、会用栈和队列解决简单的实际问题。 二、实验内容 (可任选或全做) 假设称正读数和反读数都相同的字符序列为“回文”,例如,‘abba’和‘abcba’是回文...
public成员包括构造函数、析构函数、复制构造函数和=重载函数以及其它的成员函数,主要有length()(求栈长度)、empty()(判断栈是否为空)、clear()(清空栈)、traver()(遍历栈)、push_stack(入栈函数)、top_...
判断一个顺序栈 ST(元素个数最多为 StackSize)为空的条件是__A_ A. ST.top==-1 B. ST.top!==-1 C. ST.top!==StackSize D. ST.top==StackSize 6. 表达式 a*(b+c)-d 的后缀表达式是_abc+*b--___ 7.经过以下队列运算后,...
- 栈有两个主要操作:压入(Push)和弹出(Pop)。压入操作将数据放入栈顶,而弹出操作则从栈顶移除数据。 - 除了压入和弹出操作外,栈还可能支持其他操作,如查看栈顶元素(Top)、判断栈是否为空、获取栈的大小...
本程序包含 栈体:用来保存数据项的内存空间; 栈顶指示器:用来指示栈顶数据项; 栈操作: 压栈操作(push):把数据项从栈顶压入栈内,移动栈顶指示...判断一个数学表达式中的括号(包括圆括号和方括号)是否配对。
栈和队列资源。数据结构之栈和队列 基本的增删查改。栈(Stack)和队列(Queue)是数据结构中常用的两种基本数据结构。栈是一种后进先出(Last In First Out, LIFO)的数据结构,只允许在栈顶进行插入和删除操作;而...
用数组设计堆栈,主要实现push,pop操作, 并判断是否上衣下一
//top为整数,代表栈顶元素位置 #include #include #define MAXNUM 50 typedef int Elemtype; typedef struct { Elemtype stack[MAXNUM];... printf("\n再次判断栈是否为空:k=%d(1,是;0,否)\n",k); }
文章目录前言栈栈结构实现栈的操作Stack() 创建一个新的空栈push(item) 添加一个新的元素item到栈顶pop() 弹出栈顶元素peek() 返回栈顶元素is_empty() 判断栈是否为空size() 返回栈的元素个数测试代码队列队列的实现...
实现了栈的top、pop、push、empty判断等功能。
它包含了顺序栈的各种基本操作,包括初始化、判断是否为空、获取长度、清空、销毁、入栈和出栈。 以下是代码的主要功能: InitStack:初始化顺序栈,分配内存空间。 StackEmpty:判断栈是否为空。 StackLength:获取...
顺序栈是栈的一种实现方式,它使用数组来存储数据,并提供了一系列操作栈的函数,如入栈(push)、出栈(pop)、获取栈顶元素(top)和判断栈是否为空(empty)等。 在C++中,顺序栈的实现通常涉及一个类,该类包含...
is_full 方法用于判断栈是否已满,如果栈顶指针 top 等于栈的最大容量 max_size - 1,则栈已满。 push 方法用于将元素入栈,首先将栈顶指针 top 加 1,然后将元素存储在 data[top] 的位置。如果栈已满,则抛出异常...
顺序栈(Sequential Stack)是一种使用数组实现的栈结构。它具有先进后出(Last In, First Out,LIFO)的特点...顺序栈的基本操作包括入栈(push)、出栈(pop)、获取栈顶元素(peek)和判断栈是否为空(is_empty)。
本文实例讲述了JS使用栈判断给定字符串是否是回文算法。分享给大家供大家参考,具体如下: /*使用栈stack类的实现*/ function stack() { this.dataStore = [];//保存栈内元素,初始化为一个空数组 this.top = 0;/...
微软等面试100题系列 29.栈的push、pop序列 题目:输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
栈(Stack)在计算机...可是使用Python的列表数据结构,来模拟栈的操作,使用 append 来模拟 push ,使用列表的 pop 来模拟栈的 pop ,但是这样做有一个弊端,那就是列表原本自带的操作方法同样能够使用,可能会造成
栈中的元素遵守“先进后出”的原则(LIFO,Last In First Out) 只能在栈顶进行插入和删除操作 压栈(或推入、进栈)即push,将数据放入栈顶并将... 栈的基本操作有:pop,push,判断空,获取栈顶元素,求栈大小
//定义栈的存储结构 typedef struct StackNode { ElemType data //存放数据 struct StackNode * next //指向下一个... int IsEmpty(LinkStack &S) // 判断栈是否为空 void MakeEmpty(LinkStack &S) // 清空栈