`
to_zoe_yang
  • 浏览: 138768 次
  • 性别: Icon_minigender_2
  • 来自: 01
社区版块
存档分类
最新评论

栈的push和pop判断

阅读更多

 

题目:

题目:输入两个整数序列。其中一个序列表示栈的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);
	}
}

 

分享到:
评论

相关推荐

    hb-zhyu的模拟栈

    empty – 判断栈是否为空; query – 查询栈顶元素。 现在要对栈进行 M 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。 输入格式 第一行包含整数 M,表示操作次数。 接下来 M 行,每行包含一个操作命令...

    栈和队列的基本操作实现及其应用

    1、熟练掌握栈和队列的基本操作在两种存储结构上的实现。 2、会用栈和队列解决简单的实际问题。 二、实验内容 (可任选或全做) 假设称正读数和反读数都相同的字符序列为“回文”,例如,‘abba’和‘abcba’是回文...

    一个c++描述的栈类

    public成员包括构造函数、析构函数、复制构造函数和=重载函数以及其它的成员函数,主要有length()(求栈长度)、empty()(判断栈是否为空)、clear()(清空栈)、traver()(遍历栈)、push_stack(入栈函数)、top_...

    [详细完整版]数据结构习题.pdf

    判断一个顺序栈 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.经过以下队列运算后,...

    栈和队列.docx 栈(Stack)和队列(Queue)是两种常见的数据结构

    - 栈有两个主要操作:压入(Push)和弹出(Pop)。压入操作将数据放入栈顶,而弹出操作则从栈顶移除数据。 - 除了压入和弹出操作外,栈还可能支持其他操作,如查看栈顶元素(Top)、判断栈是否为空、获取栈的大小...

    C++实现栈的括号匹配

    本程序包含 栈体:用来保存数据项的内存空间; 栈顶指示器:用来指示栈顶数据项; 栈操作: 压栈操作(push):把数据项从栈顶压入栈内,移动栈顶指示...判断一个数学表达式中的括号(包括圆括号和方括号)是否配对。

    数据结构之栈和队列 基本的增删查改

    栈和队列资源。数据结构之栈和队列 基本的增删查改。栈(Stack)和队列(Queue)是数据结构中常用的两种基本数据结构。栈是一种后进先出(Last In First Out, LIFO)的数据结构,只允许在栈顶进行插入和删除操作;而...

    用数组实现堆栈stack

    用数组设计堆栈,主要实现push,pop操作, 并判断是否上衣下一

    栈表的操作

    //top为整数,代表栈顶元素位置 #include #include #define MAXNUM 50 typedef int Elemtype; typedef struct { Elemtype stack[MAXNUM];... printf("\n再次判断栈是否为空:k=%d(1,是;0,否)\n",k); }

    3分钟带你搞懂栈和队列(Python实现)——不懂你锤我

    文章目录前言栈栈结构实现栈的操作Stack() 创建一个新的空栈push(item) 添加一个新的元素item到栈顶pop() 弹出栈顶元素peek() 返回栈顶元素is_empty() 判断栈是否为空size() 返回栈的元素个数测试代码队列队列的实现...

    栈的顺序存储

    实现了栈的top、pop、push、empty判断等功能。

    用 C 语言实现顺序栈的示例C&C.zip

    它包含了顺序栈的各种基本操作,包括初始化、判断是否为空、获取长度、清空、销毁、入栈和出栈。 以下是代码的主要功能: InitStack:初始化顺序栈,分配内存空间。 StackEmpty:判断栈是否为空。 StackLength:获取...

    c++顺序栈的实现demo

    顺序栈是栈的一种实现方式,它使用数组来存储数据,并提供了一系列操作栈的函数,如入栈(push)、出栈(pop)、获取栈顶元素(top)和判断栈是否为空(empty)等。 在C++中,顺序栈的实现通常涉及一个类,该类包含...

    基于Python顺序栈的实现

    is_full 方法用于判断栈是否已满,如果栈顶指针 top 等于栈的最大容量 max_size - 1,则栈已满。 push 方法用于将元素入栈,首先将栈顶指针 top 加 1,然后将元素存储在 data[top] 的位置。如果栈已满,则抛出异常...

    c语言-通过使用数据结构来实现顺序栈的使用

    顺序栈(Sequential Stack)是一种使用数组实现的栈结构。它具有先进后出(Last In, First Out,LIFO)的特点...顺序栈的基本操作包括入栈(push)、出栈(pop)、获取栈顶元素(peek)和判断栈是否为空(is_empty)。

    JS使用栈判断给定字符串是否是回文算法示例

    本文实例讲述了JS使用栈判断给定字符串是否是回文算法。分享给大家供大家参考,具体如下: /*使用栈stack类的实现*/ function stack() { this.dataStore = [];//保存栈内元素,初始化为一个空数组 this.top = 0;/...

    微软等面试100题系列 29题

    微软等面试100题系列 29.栈的push、pop序列 题目:输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。

    使用Python实现一个栈判断括号是否平衡

    栈(Stack)在计算机...可是使用Python的列表数据结构,来模拟栈的操作,使用 append 来模拟 push ,使用列表的 pop 来模拟栈的 pop ,但是这样做有一个弊端,那就是列表原本自带的操作方法同样能够使用,可能会造成

    C++数据结构之栈模版实现

    栈中的元素遵守“先进后出”的原则(LIFO,Last In First Out)  只能在栈顶进行插入和删除操作  压栈(或推入、进栈)即push,将数据放入栈顶并将... 栈的基本操作有:pop,push,判断空,获取栈顶元素,求栈大小

    zhsy.rar_InitStack_pop_typedef struct st

    //定义栈的存储结构 typedef struct StackNode { ElemType data //存放数据 struct StackNode * next //指向下一个... int IsEmpty(LinkStack &S) // 判断栈是否为空 void MakeEmpty(LinkStack &S) // 清空栈

Global site tag (gtag.js) - Google Analytics