题目:给定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序列的更多相关文章

  1. 数据结构---设计一个栈,push, pop, min 时间复杂度都是 O(1)

    普通的栈,push, pop 操作的复杂度是 O(1), 但是如果要找出其中的最小值,则需要 O(N)的时间. 题目要求 min 复杂度也是 O(1), 做法便是 空间换时间,每一步栈的最小值都用一个 ...

  2. 【编程题目】栈的 push、pop 序列

    29.栈的 push.pop 序列(栈)题目:输入两个整数序列.其中一个序列表示栈的 push 顺序,判断另一个序列有没有可能是对应的 pop 顺序.为了简单起见,我们假设 push 序列的任意两个整 ...

  3. 24.栈的push和pop序列[StackPushPopSequence]

    [题目] 输入两个整数序列.其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序.为了简单起见,我们假设push序列的任意两个整数都是不相等的. 比如输入的push序列是1.2 ...

  4. 第29题:推断一个序列是否是还有一个push序列的pop序列

    github:https://github.com/frank-cq/MyTest 第29题:输入两个整数序列,当中一个序列表示栈的push顺序,推断还有一个序列有没有可能是相应的pop顺序.为了简单 ...

  5. Swift处理堆栈问题——给定两组序列,其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序

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

  6. (栈)栈 给定push序列,判断给定序列是否是pop序列

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

  7. 每天一道算法题(11)——栈的push、pop 序列

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

  8. 栈的push、pop序列 【微软面试100题 第二十九题】

    题目要求: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1.2.3.4.5是某栈的压栈序列,序列4.5.3.2.1是该压栈 ...

  9. 笔试算法题(14):整数二进制表示中的1 & 判定栈的push和pop序列是否对应

    出题:输入一个整数,要求计算此整数的二进制表示中1的个数 分析: 如果整数表示为k,当其是负数的时候,使用1<<i分别检测k的每一位:当其位整数的时候,则k/2表示将其二进制表示右移一位, ...

随机推荐

  1. bootstrap2.3.2 modal 用href时有缓存

    $('body').on('hidden', '.modal', function () {$(this).removeData('modal');}); 直接在js里加入上面的代码就可以解决缓存问题 ...

  2. ios 控件

    反序列化 JSONModel 上拉刷新 下拉加载更多 MJRefresh AFNetworking 2.5 Asynchronous image downloader with cache - SDW ...

  3. QQ互联OAuth2.0 .NET SDK 发布以及网站QQ登陆示例代码(转)

    OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容. QQ登录OAuth2 ...

  4. nginx自启动脚本

    #!/bin/bash # #Startup script for Nginx - this script starts and stops the nginx daemon # # chkconfi ...

  5. 关于查看Android系统源码【Written By KillerLegend】

    可能你会想下载Android系统源码,但是我不知道你会看多少系统的源码,如果你对源码只是偶尔看一次的话,推荐你在线看Android的系统源码,下面提供几种查看android系统源码的方法. 1:打开这 ...

  6. 转学步园:jquery offset

    JQuery Offset实验与应用 我们有时候需要实现这样一种功能:点击一个按钮,然后在按钮的下方显示一个div.当按钮位于角落时,div的位置设定就需要计算,使div完全显示. 我打算使用offs ...

  7. show engine innodb status\G

    mysql> show engine innodb status\G *************************** 1. row *************************** ...

  8. ApacheBench 使用教程

    ab压力测试 ab是Apache超文本传输协议(HTTP)的性能测试工具.其设计意图是描绘当前所安装的Apache的执行性能. 主要是显示你安装的Apache每秒可以处理多少个请求. 格式: ./ab ...

  9. edge.js架起node.js和.net互操作桥梁

    今天要介绍的是edge.js这个github上刚兴起的开源项目,它可以让node.js和.net之间在in-process下互操作..net版本在4.5及以上,因为.net4.5带来的Task,asy ...

  10. Running Central Admin on Multiple Servers within a Farm

    http://sharepoint.microsoft.com/blogs/fromthefield/Lists/Posts/Post.aspx?ID=60