1. 程式人生 > >HD 1022 Train Problem I 棧的運用 比較好理解的程式碼

HD 1022 Train Problem I 棧的運用 比較好理解的程式碼

#include <stdio.h>
#include <stdlib.h>
#define max 100
char in[max];//儲存進棧序列
char out[max];//儲存出棧序列
char stack[max];//棧
int flag[max];//標記 0 表示出棧 1 表示入棧
int main()
{
    int i,j,n,top,k;
    while (scanf("%d",&n)!=EOF)
    {
        scanf("%s%s",in,out);//輸入兩個字串 
        top=0;
        i=j=k=0;
        while (i<n&&j<=n)
        {
            if(top>0&&stack[top-1]==out[i])//和出棧序列的第一個元素相同則出棧
            {
                flag[k++]=0;
                i++;
                top--;
            }
            else//不同則入棧
            {
                stack[top++]=in[j];
                j++;
                flag[k++]=1;
            }
        }
        //printf(">>%d %d %d\n",k,i,j);
        if (k==2*n)
        {
            printf("Yes.\n");
            for (i=0;i<2*n;++i)
            {
                if(flag[i]== 0)
                printf("out\n");
                else
                printf("in\n");
            }
        }
        else
        printf("No.\n");
        printf("FINISH\n");
    }
    return 0;
}