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模拟

  • 相关阅读:
    IDEA热部署插件Jrebel
    Navicat Premium15安装及破解教程
    IDEA中查看类的关系图
    PV、UV、IP名词解释
    Promise由浅入深
    URLSearchParams
    二进制流学习-Blob、ArrayBuffer、File、FileReader和FormData的区别
    前端vue以数据流方式导出word----借助 jquery
    js中 == 、=== 和 Object.is() 的区别
    后端传的是二进制流,前端应该如何通过blob处理二进制文件流格式流,并实现前端下载文件流格式
  • 原文地址:https://www.cnblogs.com/cxc1357/p/10807843.html
Copyright © 2011-2022 走看看