`
java-mans
  • 浏览: 11416737 次
文章分类
社区版块
存档分类
最新评论

栈的push、pop序列是否正确

 
阅读更多
题目:输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。

比如输入的push序列是12345,那么45321就有可能是一个pop系列。因为可以有如下的pushpop序列:push 1push 2push 3push 4poppush 5poppoppoppop,这样得到的pop序列就是45321。但序列43512就不可能是push序列12345pop序列。

分析:这到题除了考查对栈这一基本数据结构的理解,还能考查我们的分析能力。具体的实现代码如下:

// isStackPushPop.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include <iostream>
#include <stack>

using namespace std;

bool isStackPushPop(int a[], int b[], int n)
{
stack<int> ms;
int i = -1, j = 0;
while (i < n && j < n)
{
if (ms.empty() || ms.top() != b[j])
ms.push(a[++i]);
else
{
ms.pop();
j ++;
}
}
return ms.empty();
}

int main()
{
int a[] = {1,2,3,4,5};
int b[] = {5,4,2,3,1};
//int b[]={4,5,3,2,1};
//int b[]={5,4,3,2,1};
cout<<isStackPushPop(a, b, 5)<<endl;
system("pause");
return 0;
}


// isStackPushPop.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include <iostream>
#include <stack>

using namespace std;

bool isStackPushPop(int a[], int b[], int n)
{
	stack<int> ms;
	int i = -1, j = 0;
	while (i < n && j < n)
	{
		if (ms.empty() || ms.top() != b[j])
			ms.push(a[++i]);
		else
		{
			ms.pop();
			j ++;
		}
	} 
	return ms.empty();
}

int main()
{
	int a[] = {1,2,3,4,5};
	int b[] = {5,4,2,3,1};
	//int b[]={4,5,3,2,1};
	//int b[]={5,4,3,2,1};
	cout<<isStackPushPop(a, b, 5)<<endl;
	system("pause");
	return 0;
}



分享到:
评论

相关推荐

    使用栈思想 密码锁 PUSH POP

    系统每次从槽顶掉入一个数字卡 片(从 1 到 n),PUSH 代表把该数放入暂存槽(后入先出),POP 代表从暂存槽取出一个数 作为当前你要输入的密码。如下图所示: 众所周知,小米很懒,每次进门都要算,多麻烦啊,于是...

    陈越、何钦铭-数据结构作业7:Pop Sequence出栈序列检验

    Push N numbers in the order of 1, 2, 3, ..., N and pop randomly. You are supposed to tell if a given sequence of numbers is a possible pop sequence of the stack. For example, if M is 5 and N is 7, we...

    微软等面试100题系列 29题

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

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

    试写一个算法判断别读入的一个以‘@’为结束符的字符序列是否是“回文”。 [实现提示]  首先,序列1进栈,然后序列1出栈并与序列2比较 相关常量及结构定义: # define STACK_INIT_SIZE 100 # define ...

    algoboy101#note_blog_leetcode#[946]验证栈序列1

    给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返

    数据结构导论综合应用.rar

    9、输入序列为ABC,可以变为CBA时,经过的栈操作为( )。 A、push,pop,push,pop,push,pop B、push,push,push,pop, pop, pop C、push,push,pop, pop,push,pop D、push,pop,push,push,pop, ...

    实验2--栈实验报告.doc

    答:1、push函数算法分析:它是一个元素入栈函数,首先判断栈是否已满,若栈已满, 就申请栈空间,当输入一个数据时,栈顶指针top加一,始终指向栈顶元素的上面,当1 2 3 4 5入栈后,指针top指在5的上面空格里,...

    数据结构-堆栈.pdf

    通过对堆栈S操作:Push(S,1), Push(S,2), Pop(S), Push(S,3), Pop(S), Pop(S)。输出的序列为:123。 T F 2.若⼀个栈的输⼊序列为{1, 2, 3, 4, 5},则不可能得到{3, 4, 1, 2, 5}这样的出栈序列。 T F 3.顺序栈中元素...

    栈模拟停车场,用队列模拟候车场,按照从键盘上获取的数据序列进行模拟管理

    并分别设计这两个列表的判断列表空、判断列表满及进行初始化的函数,先对St,Qu,St1三个列表进行初始化,栈列表St表示的是停车场,队列Qu代表候车场,当停车场里有空位的时候利用Push()函数来进栈,没有空位的...

    [详细完整版]数据结构.doc

    考试科目:《数据结构》第一章至第四章(总分100分) 时间:90分钟 ______________学习中心(教学点) 批次: 层次: 专业: 学号: 身份证号: 姓名: 得分: 一、选择题... A、push,pop,push,pop,push,pop B、push,

    一道小题加深对栈后进先出的理解(python)

    意思就是给定一个顺序为654321的栈,判断下面的栈是否是正确的。 解题思路 栈的元素存储与利用是遵循后进先出(LIFO)的,如下图,我们可以用一个半开口的方框表示栈,开口的一端称为栈顶,就是这端进行着压栈(push)和...

    php数组函数序列之array_pop() – 删除数组中的最后一个元素

    array_pop()定义和用法 array_pop() 函数删除数组中的最后一个元素。 语法 array_pop(array)参数 ... 您可能感兴趣的文章:php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。php array_

    关联式容器序列式容器对比

    关联式容器的基础数据结构是RB-Tree(红黑树) 每个数据元素都有一个键值(key)和一个实值(value). 关联容器没有所谓的头和尾 没有push_back(), push_front(), pop_back(), pop_front(), begin(), end() 有最大最小元素

    数据结构第三章作业答案参考(C语言)

    6. 若进栈序列为1,2,3,4,进栈过程中可以出栈,则( )不可能是一个出栈序列。 A.3,4,2,1 B.2,4,3,1 C.1,4,2,3 D.3,2,1,4 7. 向顺序存储的循环队列 Q 中插入新元素的过程分为三步: ( )。 ...

    软件工程之专题九:数据结构知识

    循环链表和单向链表基本一致,差别仅在于算法中循环的条件不是结点的指针是否为空,而是他们的指针是否等于头指针, 循环链表最后一个结点的 link 指针不为 0 (NULL),而是指向了表的前端。 为简化操作,在循环链表...

    中序线索化

    {push(s,p); p=p-&gt;lchild;} if(!pr-&gt;rchild)pr-&gt;rt=1; return 1;} else { p=pop(s); visit(p,pr);pr=p; p=-&gt;rchild; } else{ p=pop(s); if(p-&gt;lc::NULL) {p-&gt;lt=1;p-&gt;lc=pr;} if(pr&&pr-&gt;rc==NULL) ...

    数据结构实验程序魔王语言算术表达式等等

    Push(SeqStack *S, char x) {if(S-&gt;top== Size) return(0); S-&gt;top++; S-&gt;elem[S-&gt;top]=x; } Pop(SeqStack *S, char *x) {if(S-&gt;top==-1) return(0); else {*x= S-&gt;elem[S-&gt;top]; S-&gt;top--; } } 还有树的的...

    平衡二叉树

    //taller反映树是否长高 if(!T) { //插入新结点,树长高,taller为true T=new AvlNode; T-&gt;data=num; T-&gt;lchild=T-&gt;rchild=NULL; T-&gt;bf=EH; taller=true; } else { if(num==T-&gt;data) {...

    leetcode注销-ADPY13_interview:ADPY13_采访

    检查堆栈是否为空。 该方法返回 True 或 False。 push - 向堆栈顶部添加一个新项目。 该方法不返回任何内容。 pop - 移除栈顶元素。 堆栈发生变化。 该方法返回栈顶元素 peek - 返回堆栈的顶部元素,但不删除它。 ...

    LeetCode判断字符串是否循环-algorithm:数据结构与算法

    LeetCode判断字符串是否循环 ...题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类型。 实现源码: 旋转数组的最小数字 题目描述:把一个数组最开始的若干个元素搬到数组的末尾,

Global site tag (gtag.js) - Google Analytics