zoukankan      html  css  js  c++  java
  • poj1363

    堆栈的模拟,给定序列,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 ");
    }
    else
    printf("No ");
    }//line of block
    printf(" ");
    }//block
    return 0;
    }

  • 相关阅读:
    codeforces 439C 模拟
    codeforces 435B
    【WebVR】AFrame中的A-sky无法利用src指定路径显示全景图
    【UE4】添加头文件之后VS中UCLASS()报错问题解决办法
    【UE4】蓝图之间的通讯
    git中报unable to auto-detect email address 错误的解决办法
    2017ACM省赛总结与生涯回顾
    hihocoder#1121 : 二分图一•二分图判定
    hihocoder#1039 : 字符消除
    2048low版
  • 原文地址:https://www.cnblogs.com/gabygoole/p/4470590.html
Copyright © 2011-2022 走看看