堆栈的模拟,给定序列,1,2,3,4,...判断堆栈出栈顺序是否合法

5 //5个数入栈
1 2 3 4 5 //出栈顺序
5 4 1 2 3 //出栈顺序
0 //5个数的结束
6 //6个数的入栈
6 5 4 3 2 1
0 //6个数的结束
0 //输入结束

数组作栈

a栈放目标出栈顺序,让1,2,3,4依次入stack栈,如果a[pos]和stack[top]比较,相同,pos++,top--即表示出栈,top开始为-1,表示为空栈

如果一开始a[0]=3,stack[0]=1,这个时候继续让2,3入stack栈,期间1,2均不能出栈,因为a[0]=3,即是3为第一个出栈的

比较了stack[top]stack栈的栈顶元素,如果相同,应当让stack栈顶元素出栈即是top--,让--之前的stack[top]失效,取当前栈顶元素比较,如果不同才,才让新元素入栈

一定是先比较当前栈里面,没有才让新元素入栈,注意技巧:cur=0,先单独赋值stack[++top]=++cur,注意容易写成stack[top++]=++cur,大错特错

栈的比较过程:如果当前栈顶元素与a栈待取元素相同

if(a[pos]==stack[top])

a栈向下移一位,表示当前待取,top为很可能为-1,当前栈空,top=0,stack[top]=++cur,++cur的作用:跟踪新数

else

stack[++top]=++cur

  如果当前stack栈顶元素与a栈中待取数不同,不能够top--,因为就算相同,你也不能让他出栈,因为它出栈先进后出

总结:如果当前栈顶元素,与a栈中待取数不同,新元素入栈,如果相同,更新栈顶元素(可能为空栈)

while(pos<tim && top<tim)解释:

合法出栈:最后一次为a[tim-1],pos++,pos=tim,出循环

非法出栈:top==tim时候

判断用top==tim或者pos==tim

#include<stdio.h>
#include<stdlib.h>

int main()
{
int i,tim;
int a[1024],stack[1024];
while(scanf("%d",&tim)!=EOF)
{
if(tim==0)
return 0;
while(1){
for(i=0;i<tim;i++)
{
scanf("%d",&a[i]);
if(a[0]==0)
break;
}
if(a[0]==0)
break;
int pos=0,cur=0,top=-1;
stack[++top]=++cur;
while(pos<tim && top<tim)
{
if(a[pos]==stack[top])
{
top--;
pos++;
if(top<0)
{
top=0;
stack[top]=++cur;
}
}
else
stack[++top]=++cur;
}
if(top==0)
{
printf("Yes\n");
}
else
printf("No\n");
}//line of block
printf("\n");
}//block
return 0;
}

poj1363的更多相关文章

  1. [poj1363]Rails_模拟_栈

    Rails poj-1363 题目大意:判断一个序列是否是1~n的合法出栈序列. 注释:$1\le n\le 10^4$. 想法:开始想到一种想法. 对于一段序列来讲,显然从首元素开始的连续小于尾元素 ...

  2. POJ1363:Rails

    Description There is a famous railway station in PopPush City. Country there is incredibly hilly. Th ...

  3. 火车进出站(POJ1363)

    题目链接:http://poj.org/problem?id=1363 #include <stdio.h> #include <stack> using namespace ...

  4. POJ1363 Rails 验证出栈序列问题

    题目地址: http://poj.org/problem?id=1363 此题只需验证是否为合法的出栈序列. 有两个思路: 1.每个已出栈之后的数且小于此数的数都必须按降序排列.复杂度O(n^2),适 ...

  5. poj1363——Rails

    Description There is a famous railway station in PopPush City. Country there is incredibly hilly. Th ...

  6. poj1363 Rails Central Europe 1997

    P.S.: 输出换行 三个方法 1.直接按照要求做 根据给的数,需要push,pop哪些数据,具有唯一性 数最多进栈一次,出栈一次 O(n) Source Code Problem: User: co ...

  7. OJ题目分类

    POJ题目分类 | POJ题目分类 | HDU题目分类 | ZOJ题目分类 | SOJ题目分类 | HOJ题目分类 | FOJ题目分类 | 模拟题: POJ1006 POJ1008 POJ1013 P ...

  8. 【栈】 poj 1363

    poj1363,这道题是数据结构与算法中的经典问题,给定一组进栈顺序,问栈有多少种出去的顺序. #include<stdio.h> #include <stack> #incl ...

随机推荐

  1. (转)iOS7界面设计规范(10) - UI基础 - 文字排版与配色

    明天就是周四了.貌似前几天还在恨周一呢.话说今天几乎开了一整天的会,正经事情没做多少:这种感觉比一整天从早到晚12个小时的忙碌于一件事情还要让人感到疲惫的对叭?那今天的iOS7设计规范更新又是一篇很简 ...

  2. (转载)iOS Framework: Introducing MKNetworkKit

    This article is available in Serbo-Croatian,  Japanese and German. (Translations in Serbo-Croatian b ...

  3. [RxJS] Stopping a Stream with TakeUntil

    Observables often need to be stopped before they are completed. This lesson shows how to use takeUnt ...

  4. php:兄弟连之面向对象版图形计算器1

    曾经看细说PHP的时候就想做这个,可是一直没什么时间,这次总算忙里偷闲搞了代码量比較多的project. 首先,文档结构,都在一个文件夹下就好了,我的就例如以下. 一開始,进入index.php文件. ...

  5. java基础之String

    字符串的含义 字符串的应用 字符串的方法

  6. input(file)浏览按钮美化 (巨简单),网上那些都弱爆了

    <!DOCTYPE HTML> <html> <body> <input type="file" id="upload" ...

  7. ie8 hack

    1.‘\9’: eg:.test { color/*\**/: blue\9 }.header {width:300px;} /* 所有浏览器*/.header {width/*\**/:330px\ ...

  8. SqlServer表属性查询

    获得表信息: select syscolumns.name as field, syscolumns.isnullable as nullis, systypes.name as sqltype, s ...

  9. hdu 验证角谷猜想 1279

    Problem Description 数论中有许多猜想尚未解决,其中有一个被称为"角谷猜想"的问题,该问题在五.六十年代的美国多个著名高校中曾风行一时,这个问题是这样描述的:任何 ...

  10. C++中explicit

    [explicit] 1.用于抑制隐式转换,即: X x = ; // error X x(); // ok 2.只对一个实参的构造函数有效,但是,可以用多有多个实参的构造函数,目前没有意义: cla ...