zoukankan      html  css  js  c++  java
  • 栈例题-火车车厢重组

    一组火车车厢编号1-n

    从右向左经过车站

    每节车厢可以临时进站(栈),放过主线上的几节车厢后再重新上路跟上。

    输入车厢数和希望得到的车厢顺序,判断是否可能。

    CCF教材下册P149,例6.9

    代码如下:

     1 #include <iostream>
     2 #include <string>
     3 #include <cmath>
     4 #include <algorithm>
     5 using namespace std;
     6 struct Stack
     7 {
     8     int a[100];
     9     int p;
    10 };
    11 bool isempty(Stack *s)
    12 {
    13     return s->p==-1;
    14 }
    15 void push(Stack *s,int x)
    16 {
    17     s->p++;
    18     s->a[s->p]=x;
    19 }
    20 int pop(Stack *s)
    21 {
    22     if(!isempty(s))
    23     {
    24         return s->a[s->p--];
    25     }
    26     else
    27     {
    28         //cout<<"The stack is empty";
    29         return -1;
    30     }
    31 }
    32 int gettop(Stack *s)
    33 {
    34     if(!isempty(s))
    35     {
    36         return s->a[s->p];
    37     }
    38     else
    39     {
    40         //cout<<"The stack is empty";
    41         return -1;
    42     }
    43 }
    44 main()
    45 {
    46     Stack *mystack=new Stack;
    47     int a[100]={0},b[100]={0},n,*p1,*p2;//a为目的序列,b为初始序列,b火车从右向左经过车站
    48     bool flag=true;
    49     mystack->p=-1;
    50     p1=a;
    51     p2=b;
    52     //初始化开始
    53     cin>>n;
    54     for(int i=0; i<n; i++)
    55     {
    56         b[i]=i+1;
    57     }
    58     for(int i=0; i<n; i++)
    59     {
    60         cin>>a[i];
    61     }
    62     //初始化结束
    63     while(*p1!=0)
    64     {
    65         if(*p2==0&&gettop(mystack)!=*p1)
    66         {
    67             flag=false;
    68             break;
    69         }
    70         else
    71         {
    72             if(*p1==*p2)
    73             {
    74                 p1++;
    75                 p2++;
    76             }
    77             else if(*p1==gettop(mystack))
    78             {
    79                 pop(mystack);
    80                 p1++;
    81             }
    82             else
    83             {
    84                 push(mystack,*p2);
    85                 p2++;
    86             }
    87         }
    88     }
    89     if(flag)
    90     {
    91         cout<<"I can do it.";
    92     }
    93     else
    94     {
    95         cout<<"That is impossible.";
    96     }
    97     free(mystack);
    98 }

    end here

  • 相关阅读:
    QT解析和组装json
    linux下磁盘存储空间不足
    linux下的QT打包方法
    linux下编译protobuf
    linux下编译opencv
    linux下的qt串口通信
    QT执行shell脚本及linux指令相关
    windows下QT打包
    启动zookeeper却没有进程
    Linux命令
  • 原文地址:https://www.cnblogs.com/wanjinliu/p/11420051.html
Copyright © 2011-2022 走看看