zoukankan      html  css  js  c++  java
  • [刷题] PTA 02-线性结构4 Pop Sequence

    模拟栈进出

    方法一:

     1 #include<stdio.h>
     2 #define MAXSIZE 1000
     3 
     4 typedef struct{
     5     int data[MAXSIZE];
     6     int top;
     7 }SqStack;
     8 
     9 int InitStack(SqStack *s){
    10     s->top=-1;
    11     return 0;
    12 }
    13 
    14 int Push(SqStack *s,int e){
    15     if(s->top==MAXSIZE) return 1;
    16     s->top++;
    17     s->data[s->top]=e;
    18     return 0;
    19 }
    20 
    21 int Pop(SqStack *s){
    22     int e;
    23     if(s->top==-1) return 1;
    24     e = s->data[s->top];
    25     s->top--;
    26     return e;
    27 }
    28 
    29 int main(){
    30     int m,n,k,i,h;
    31     SqStack s,t;
    32     scanf("%d%d%d",&m,&n,&k);
    33     while(k--){
    34         InitStack(&s);
    35         InitStack(&t);
    36         for(i=n-1;i>=0;i--){
    37             scanf("%d",&(t.data[i]));
    38         }
    39         t.top=n-1;
    40         i=0;
    41         while(i<=n){
    42             if(s.data[s.top]==t.data[t.top]&&s.top!=-1){
    43                 Pop(&s);
    44                 Pop(&t);
    45             }else if(s.top<m-1 && i<n){
    46                 i++;
    47                 Push(&s,i);
    48             }else{
    49                 break;
    50             }
    51         }
    52         if(s.top==-1 && t.top==-1){
    53             printf("YES
    ");
    54         }else{
    55             printf("NO
    ");
    56         }
    57     }
    58     return 0;
    59 }

    分析:

    1、自定义栈

    2、通过两个栈模拟进出

    方法二:

     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<vector>
     4 #include<stack>
     5 using namespace std;
     6 
     7 int M,N,K;
     8 
     9 int Check(vector<int> &v) {
    10     int i=0;
    11     int num=1;
    12     int cap=M+1;
    13     stack<int> sta;
    14     sta.push(0);
    15     while(i<N) {
    16         while(v[i]>sta.top()&&sta.size()<cap)
    17             sta.push(num++);
    18         if(v[i++]==sta.top())
    19             sta.pop();
    20         else
    21             return 0;
    22     }
    23     return 1;
    24 }
    25 
    26 int main() {
    27     vector<int> vec(N,0);
    28     scanf("%d%d%d",&M,&N,&K);
    29     for(int i=0; i<K; i++) {
    30         for(int j=0; j<N; j++) {
    31             int number;
    32             scanf("%d",&number);
    33             vec.push_back(number);
    34         }
    35         if(Check(vec)) printf("YES
    ");
    36         else printf("NO
    ");
    37         vec.clear();
    38     }
    39     return 0;
    40 }

    分析:

    1、利用c++容器vector和stack模拟

  • 相关阅读:
    SpringMVC-乱码问题
    SpringMVC-数据提交
    SpringMVC-结果跳转方式
    SpringMVC-Controller&RestFul
    SpringMVC-基础
    Spring-声明式事务
    Spring-整合MyBatis
    Spring-AOP
    android 入门-工序
    android 入门-android Studio 解决方案
  • 原文地址:https://www.cnblogs.com/cxc1357/p/10807843.html
Copyright © 2011-2022 走看看