`
to_zoe_yang
  • 浏览: 143194 次
  • 性别: 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);
	}
}

 

分享到:
评论

相关推荐

    数据结构实验 栈和队列 回文判断

    它的主要操作包括压入(Push,将元素添加到栈顶)和弹出(Pop,移除栈顶元素)。在判断回文中,栈可以用来存储字符串的一半,然后逐一比较另一半的字符与栈顶的字符,若都相等,则为回文。 接着,我们了解队列...

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

    首先,栈(Stack)是一种后进先出(Last In First Out, LIFO)的数据结构,其操作主要包含两个基本操作:压入(Push)和弹出(Pop)。压入是将元素添加到栈顶,而弹出则是移除栈顶的元素。栈常被用来处理递归、...

    PUSH_POP:一个UINavigationController的分类,实现push或者pop的完成回调.以及一些特殊的push或者pop需求

    - **条件判断**:在push或pop之前进行一些条件检查,根据业务逻辑决定是否执行操作。 - **数据传递**:可能提供了一种更方便的方式在push或pop时传递数据给目标视图控制器。 - **错误处理**:如果在push或pop过程...

    用队列和栈判断回文_赫夫曼数_双向链表_内部排序(8种).zip

    在C语言中,可以利用数组模拟栈和队列,通过push和pop操作实现这一过程。 2. **赫夫曼数**: 赫夫曼编码(Huffman Coding)是一种用于无损数据压缩的算法,其核心思想是建立一棵具有最小带权路径长度的二叉树,...

    栈判断是否是回文串

    栈的操作主要有两个:入栈(push)和出栈(pop)。此外,还有查看栈顶元素但不移除的 peek 操作以及检查栈是否为空的 isEmpty 操作。 利用栈判断回文串的算法步骤如下: 1. 初始化一个空栈。 2. 遍历输入字符串的...

    用栈判断括号是否匹配

    ### 使用栈判断括号是否匹配 #### 背景与目的 在计算机科学中,括号匹配问题是一个经典的算法问题,通常用于验证编程语言中的代码结构是否正确。本篇文章将介绍如何利用栈(Stack)这一数据结构来解决括号匹配问题...

    东北大学 数据结构实验2 栈和队列

    其中,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)。这是因为在栈中压入所有元素后再依次弹出可以...

    java模拟顺序栈实现回文串的判断

    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文件中常见的括号有`和`&gt;`...

    两个栈空间共享,栈满打印

    描述中提到的实验目的是让学生掌握栈的两种实现方式,特别是栈空和栈满的判断条件,以及理解栈空间共享的概念及其实现方法。实验内容是设计一个程序,通过数组创建两个栈,输入一序列整数,将奇数存入第一个栈,偶数...

    数据结构C语言回文判断(运用栈以及队列完成).doc

    通过本实验,旨在熟悉栈和队列的各项操作,区别栈和队列的操作原理,并学习如何使用栈和队列来判断回文序列。 二、实验内容 本实验的主要内容是使用栈和队列来判断回文序列。回文序列是指正读和反读都一样的字符...

    由c++实现的用栈实现回文数据的判断

    根据给定文件的信息,本文将围绕“如何使用C++中的栈结构来判断一个字符串是否为回文”这一主题展开详细讨论。首先,我们会对回文的概念进行简要介绍,并解释为何栈这种数据结构适合用于回文检测。接着,我们将深入...

    栈的实现和应用(实验报告+代码)

    栈的基本操作包括初始化、入栈(push)、出栈(pop)、查看栈顶元素(top)和判断栈是否为空(isEmpty)。这些操作都需要确保不越界,以避免非法访问。 接着,我们讨论如何使用栈来“判断输入的字符串中的括号是否...

Global site tag (gtag.js) - Google Analytics