29. 栈的push,pop序列
题目:给定2个整数序列,其中1个是栈的push顺序,判断另一个有没有可能是对应的pop顺序
解:其实这题主要是判断进栈次数和出栈次数誓不是相等。我是用栈作的,效率不高,每一个元素最多出栈1次,进栈1此,所以最多进行2n次操作,然后每次对栈顶元素和pb指针指向的元素进行比较(因为假设序列中整数都不相等)
代码:
/*
判断栈push和pop顺序是否符合
push中的元素顺序入栈,如果等于pb指向的元素,那么循环出栈,知道栈空或者pb元素和栈顶元素不一样,如果一样,出栈且pb++,总共的入栈出栈次数最多是2*n次
*/ #include<iostream>
using namespace std;
#define MAX 50 typedef struct
{
int data[MAX];
int top;
}Stack; Stack* create_stack(void)
{
Stack* s=new Stack;
if(s)
s->top=-; return s;
} bool empty_stack(Stack* s)
{
if(-==s->top)
return true;
return false;
} bool full_stack(Stack* s)
{
if(MAX-==s->top)
return true;
return false;
} void push_stack(Stack* s,int value)
{
if(full_stack(s))
return ;
s->top++;
s->data[s->top]=value;
} int pop_stack(Stack* s)
{
if(empty_stack(s))
return -;
int temp=s->data[s->top];
s->top--;
return temp;
} int get_stack(Stack* s)
{
if(empty_stack(s))
return -;
return s->data[s->top];
} void free_stack(Stack* s)
{
if(s)
{
delete s;
s=NULL;
}
} bool satisfy(int *a,int *b,int n)
{
int i=;
int pa,pb;
Stack* s; pa=;
pb=;
s=create_stack();
while(i++<*n)
{
if(pa==n && pb==n)
break;
if(pa<n)
{
push_stack(s,a[pa]);
pa++;
} while(!empty_stack(s) && get_stack(s)==b[pb])
{
pop_stack(s);
pb++;
}
} bool flag;
if(empty_stack(s) && pb==n)
flag=true;
else
flag=false;
free_stack(s); return flag; } int main(void)
{
int a[MAX];
int b[MAX];
int n,i; cin>>n; for(i=;i<n;i++)
cin>>a[i];
for(i=;i<n;i++)
cin>>b[i]; cout<<boolalpha;
cout<<satisfy(a,b,n)<<endl; return ;
}
29. 栈的push,pop序列的更多相关文章
- 数据结构---设计一个栈,push, pop, min 时间复杂度都是 O(1)
普通的栈,push, pop 操作的复杂度是 O(1), 但是如果要找出其中的最小值,则需要 O(N)的时间. 题目要求 min 复杂度也是 O(1), 做法便是 空间换时间,每一步栈的最小值都用一个 ...
- 【编程题目】栈的 push、pop 序列
29.栈的 push.pop 序列(栈)题目:输入两个整数序列.其中一个序列表示栈的 push 顺序,判断另一个序列有没有可能是对应的 pop 顺序.为了简单起见,我们假设 push 序列的任意两个整 ...
- 24.栈的push和pop序列[StackPushPopSequence]
[题目] 输入两个整数序列.其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序.为了简单起见,我们假设push序列的任意两个整数都是不相等的. 比如输入的push序列是1.2 ...
- 第29题:推断一个序列是否是还有一个push序列的pop序列
github:https://github.com/frank-cq/MyTest 第29题:输入两个整数序列,当中一个序列表示栈的push顺序,推断还有一个序列有没有可能是相应的pop顺序.为了简单 ...
- Swift处理堆栈问题——给定两组序列,其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序
题目:输入两个整数序列.其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序.为了简单起见,我们假设push 序列的任意两个整数都是不相等的.比如输入的push 序列是1. ...
- (栈)栈 给定push序列,判断给定序列是否是pop序列
题目: 输入两个整数序列.其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序.为了简单起见,我们假设push序列的任意两个整数都是不相等的. 比如输入的push序列是1.2. ...
- 每天一道算法题(11)——栈的push、pop 序列
题目:输入两个整数序列.其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序.为了简单起见,我们假设push 序列的任意两个整数都是不相等的. 例如:输入的push 序列是 ...
- 栈的push、pop序列 【微软面试100题 第二十九题】
题目要求: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1.2.3.4.5是某栈的压栈序列,序列4.5.3.2.1是该压栈 ...
- 笔试算法题(14):整数二进制表示中的1 & 判定栈的push和pop序列是否对应
出题:输入一个整数,要求计算此整数的二进制表示中1的个数 分析: 如果整数表示为k,当其是负数的时候,使用1<<i分别检测k的每一位:当其位整数的时候,则k/2表示将其二进制表示右移一位, ...
随机推荐
- 《shell条件测试语句,字符串测试apache是否开启》
还得我想了10分钟才明白”!=“和"-n"的用法区别,做个笔记捋一捋 第一种方法:测试apache是否开启?字符串测试 #!/bin/bash web=`/usr/bin/pgre ...
- Mentor PADS 9.5下载安装及破解指南
Pads,是一款用于设计.模拟电子线路及设计电路板的电脑软件,原由Innoveda公司开发,其后改名为PowerPCB,在2002年4月Innoveda被Mentor Graphics收购,近年再次改 ...
- 把url后面的.html去掉
$url = "http://haichuang1997.bmlink.com/supply/dc_355472.html";echo rtrim($url, '.html');
- PHP运行方式对比
文章内容来自以下站点http://www.cnblogs.com/xia520pi/p/3914964.html 关于PHP目前比较常见的五大运行模式: 1.CGI(通用网关接口 / Common G ...
- Delphi XE5教程7:单元引用和uses 子句
内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误! 也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者 ...
- Messages.pas里的消息
一.Windows 消息大全 这张表拷贝自万一兄的帖子:http://www.cnblogs.com/del/archive/2008/02/25/1079970.html 但是我希望自己能把这些消息 ...
- easyui获取一行数据和修改data-options的值
<table id="tab" class="easyui-datagrid" style="width: 100%; height: 500p ...
- 将开始我的WebForm控件开发之旅
时间总是过得很快,一转眼三个月就过去了,三个月内发生了很多的事.因为学校的学习,离开了我入门WPF的公司:开发了第一个外包项目,做的是WebForm的:而且了马上要毕业了,毕业后的公司应该是专门用We ...
- [Java][RCP] 引入第三方jar包时出错: XXXcannot be found XXX
为什么会这样? 下面的博客有介绍,不在累赘 http://dengmin.iteye.com/blog/260585 这些博客貌似忘掉了一点,或者是我本地的Eclipse新建的项目Version不够高 ...
- 在Debian中安装VMware Workstatption 12
在Debian中安装VMware Workstatption 12-----------------------------------------------> 下载文件: *vmwar ...