zoukankan      html  css  js  c++  java
  • 数据结构实验之栈与队列七:出栈序列判定

    Problem Description

    给一个初始的入栈序列,其次序即为元素的入栈次序,栈顶元素可以随时出栈,每个元素只能入栈依次。输入一个入栈序列,后面依次输入多个序列,请判断这些序列是否为所给入栈序列合法的出栈序列。

    例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个出栈序列,但4,3,5,1,2就不可能是该序列的出栈序列。假设压入栈的所有数字均不相等。

    Input

     第一行输入整数n(1<=n<=10000),表示序列的长度。

    第二行输入n个整数,表示栈的压入顺序。

    第三行输入整数t(1<=t<=10)。

    后面依次输入t行,每行n个整数,表示要判断的每一个出栈序列。

    Output

     对应每个测试案例输出一行,如果由初始入栈序列可以得到该出栈序列,则输出yes,否则输出no。

    Sample Input

    5
    1 2 3 4 5
    2
    4 5 3 2 1
    4 3 5 1 2
    题解:每一次将第i个数前的数压入栈,然后将栈顶元素出栈;判断一下第i个数与栈顶元素的大小,若不比栈顶元素大则出栈,否则压栈;

     1 #include <iostream>
     2 #include<stdio.h>
     3 #include<string.h>
     4 #include<stack>
     5 using  namespace std;
     6 int a[10010];
     7 int main()
     8 {
     9     int i,j,n,p,b,t,m;
    10     stack<int>s;
    11     scanf("%d",&n);
    12     for(i=0; i<n; i++)
    13         scanf("%d",&a[i]);
    14 
    15  cin>>b;
    16     for( m=0; m<b; m++)
    17     {
    18         int k=0,count2=0,count1=0;
    19         while(!s.empty())
    20         {
    21             s.pop();
    22         }//清空栈
    23         for(j=0; j<n; j++)
    24         {
    25             scanf("%d",&p);
    26             for(i=k; i<n; i++)
    27             {
    28                 if(!s.empty())//空判断栈是否为非(易造成运行错误,若栈为空)
    29                 {
    30                     if(s.top()>=p)
    31                         break;
    32                 }
    33 
    34                 if(a[i]==p)
    35                 {
    36                     s.push(a[i]);
    37                     k=count2+1;
    38                     break;
    39                 }
    40                 else
    41                 {
    42                     s.push(a[i]);
    43                     count2++;
    44                 }
    45             }
    46             if(s.top()==p)
    47                 count1++;
    48             s.pop();
    49         }
    50         if(count1==n)
    51             printf("yes
    ");
    52         else
    53             printf("no
    ");
    54     }
    55     return 0;
    56 }
  • 相关阅读:
    Python编程题24--回文数
    Python编程题23--移动零
    Python编程题22--只出现一次的数字
    Python编程题21--每日温度
    Python编程题20--最大子序和
    Python编程题19--比特位计数
    推荐系统中对比实验工具--伯乐bole
    pytorch中反向传播的loss.backward(retain_graph=True)报错
    win10彻底禁止自动更新(家庭版操作)
    linux使用清华源安装工具,切换清华源
  • 原文地址:https://www.cnblogs.com/moomcake/p/8634332.html
Copyright © 2011-2022 走看看