`
u010815305
  • 浏览: 30516 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

栈的输入和弹出序列

 
阅读更多
题目描述:

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。

输入:

每个测试案例包括3行:

第一行为1个整数n(1<=n<=100000),表示序列的长度。

第二行包含n个整数,表示栈的压入顺序。

第三行包含n个整数,表示栈的弹出顺序。

输出:

对应每个测试案例,如果第二个序列是第一个序列的弹出序列输出Yes,否则输出No。

样例输入:
5
1 2 3 4 5
4 5 3 2 1
5
1 2 3 4 5
4 3 5 1 2
样例输出:
Yes
No

判定方法如下:

如果第二个序列中当前要判断的元素刚好与栈顶元素相等,则直接pop出来,如果不等,则将第一个序列的后面还没有入栈的元素入栈,直到将与之相等的元素入栈为止,如果第一个序列的所有的元素都入栈了,还没有找到与之相等的元素,则说明第二个序列不是第一个序列的弹出序列,

#include<stdio.h>
#include<stdlib.h>
#define MAX 1000
int top=-1;
bool push(int *A,int data)
{
	if(top>=MAX-1||top<-1)
		return false;
		
	A[++top]=data;
	return true;
} 

bool pop()
{
	if(top<0)
		return false;
	top--;
	return true;
}
bool isPopOrder( int* pPush, int* pPop,int* stack,int nLength)
{
	
	if(pPush!=NULL&&pPop!=NULL&&nLength>0)
	{
		int pushIndex=0;
		for(int i=0;i<nLength;i++)
		{
			while(top==-1||stack[top]!=pPop[i])
			{
				if(pushIndex==nLength)
					return false;
					
				push(stack,pPush[pushIndex++]);
			}
			pop();
		}
	}
	return true;
	 
} 

int main()
{
	int num;
	int stack[MAX];
//stack辅助栈  依次压入pPush栈中的序列,按照pPop栈中的序列依次弹出	
	while(scanf("%d",&num)!=EOF)
	{
		int* pPush =(int*)malloc(num*sizeof(int));
		
		if(pPush==NULL)
			exit(0);
		for(int i=0;i<num;i++)
			scanf("%d",pPush+i);
		
		
		int* pPop=(int*)malloc(num*sizeof(int));
		if(pPop==NULL)
			exit(0);
		for(int i=0;i<num;i++)
			scanf("%d",pPop+i);
			
		 if(isPopOrder(pPush,pPop,stack,num))
		 	printf("YES\n");
		else
			printf("NO\n");
			
		free(pPush);
		pPush=NULL;
		free(pPop);
		pPop=NULL;
	}
	return 0;
}


结果:

分享到:
评论

相关推荐

    hadoop2面试题 -判断一个序列是不是栈的输出序列.pdf

    本题目考察了如何判断一个给定的序列是否可以作为栈的弹出(pop)序列,即根据已知的入栈(push)顺序,验证另一序列是否可能为对应的弹出顺序。此题旨在测试应聘者对栈的理解及其应用能力。 #### 题目描述 题目...

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

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

    数据结构栈和队列试题及答案

    如果栈的输入序列为1, 2, 3, …, n,且输出序列的第一个元素是n,则意味着n是最先被弹出的元素,因此它是最后一个入栈的元素。在这样的情况下,第i个输出的元素应该是按照逆序的方式出现,即n-i+1。 3. **栈的输出...

    剑指Offer:栈的压入、弹出序列(Python)

    输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但...

    栈和队列考研题

    而序列346521(选项C)不是合法的出栈序列,因为在弹出6之前必须先弹出5和4。 5. **栈操作序列实例**:对于输入序列为123…n的情况,若要使输出序列为CBA(输入序列为ABC),则需要进行的操作序列为`push, push, ...

    用栈实现队列逆序输出

    3. 当栈1非空时,将栈1的顶部元素弹出并压入栈2,直到栈1为空。 4. 此时,栈2中的元素顺序即为原队列的逆序。从栈2顶部开始逐个弹出元素,即可得到逆序输出的队列。 在C语言中,我们可以自定义栈和队列的数据结构。...

    栈与队列及其应用-算术表达式求值演示

    我们遍历这个表达式,遇到数字时将其压入栈,遇到运算符时弹出栈顶的两个数字进行运算,然后将结果压回栈。这样,最后栈顶的值就是表达式的解。 队列(Queue)则是一种先进先出(FIFO, First In First Out)的数据...

    数据结构 整数计算 C语言 栈操作

    `分别从操作数栈中弹出后一个和前一个操作数; - 根据弹出的运算符执行相应的计算,并将结果存入变量`x`; - 最后将计算得到的结果`x`压入操作数栈`s1`中。 通过以上分析,我们可以清楚地了解到如何利用栈结构在...

    实栈的基本操作.doc的实验报告

    用户输入要转换的十进制数和目标进制数,然后通过取余操作将十进制数的每一位压入栈中,接着反复弹出栈顶元素并根据目标进制转换成相应的字符或数字进行输出。例如,对于十六进制,当弹出的数字大于10时,会打印对应...

    以栈停车场的模拟管理

    S`、队列的压入`push_Q`、栈的查找`find_S`、队列的查找`find_Q`、队列的输出`out_Q`、栈的打印`print_S`、队列的打印`print_Q`、栈的弹出`pop_S`等函数。 10. **程序调试**: - 为了找出程序中的错误,可以使用...

    第3章 栈和队列1

    11. 输入序列abcdef,如果在进栈过程中允许退栈,仍无法得到序列cabdef,因为c在a和b之后入栈,不能在它们之前出栈(选项D)。 12. 三个元素X,Y,Z顺序进栈,不可能的出栈排列是ZX,因为Z必须在X之后出栈(选项B)。...

    数据结构练习题-栈和队列.pdf

    1. 栈的操作原则遵循后进先出,即最后进入栈的元素最先被弹出。例如,当进行进栈操作时,新元素会被压入栈顶;而在退栈操作时,最先压入的元素(栈底元素)将首先被移除。栈常用于解决递归问题、表达式求解(如括号...

    数据结构 实验 栈和队列及其应用

    首先,我们将输入的十进制数除以8,余数作为栈中的元素,然后将栈中的元素弹出,直到栈为空。在弹出元素时,如果元素小于10,则直接输出,如果元素大于等于10,则将其转换为对应的字符(A-F)并输出。 算术四则混合...

    C语言编写的算术表达式求值程序

    同时,它还具备显示输入序列和计算过程中栈变化的功能,以帮助用户理解程序的工作原理。为了增加程序的健壮性,它还包含了错误处理机制,能够在遇到无效或错误的表达式时,提供具体的错误原因提示。 首先,我们需要...

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

    1. **主要算法流程图**:包括输入字符串、压栈、弹出栈顶元素进行比较等步骤。 2. **程序清单**:包含初始化栈、初始化队列、入栈、出栈等功能的实现代码。 #### 程序清单示例 ```cpp #include #include #include...

    数据结构与算法:栈队列的题库

    选项C“EABCD”是不可能的输出结果,因为一旦E被弹出后,A就不能再出现在E之后。 14. **答案:B**。队列常用于系统程序的作业调度,因为它能够按照先进先出的原则处理任务。 15. **答案未完整给出**。从键盘输入的...

    第3章栈、队列与递归习题解答1

    因此,对于一个特定的栈输入序列,存在一系列可能的合法输出序列。 例如,对于输入序列 `1,2,3,4,5`,合法的输出序列包括但不限于 `1,2,3,4,5`、`5,4,3,2,1` 和 `3,2,1,4,5`。这些序列都是由栈的特性决定的,因为每...

    数据结构实验串 排序 栈,

    栈的主要操作有压入(Push)元素到栈顶和弹出(Pop)栈顶元素。栈在计算机程序设计中扮演着重要角色,例如在表达式求值、递归调用、浏览器历史记录等方面都有应用。在编程中,栈通常通过数组或链表实现。 在这个...

    括号序列.zip

    括号序列,也被称为平衡括号问题或者栈的应用,是计算机科学中一个常见的问题,尤其在算法设计和数据结构的学习中占据着重要地位。括号序列主要涉及到的是如何判断一个字符串是否是由合法的开括号(如'('、'{'、'['...

    判断字符序列是否是回文

    - 从栈中弹出一个字符,并从队列头部取出一个字符。 - 比较这两个字符是否相等。 - 如果不相等,则说明不是回文,返回`FALSE`。 - 如果相等,则继续进行下一次比较。 4. **结束条件**: - 当队列为空时,说明...

Global site tag (gtag.js) - Google Analytics