poj-1363 c模擬棧

棧呢,就像裝羽毛球的圓筒一樣(一頭堵上),你只能先放進去的後拿出來,而後放進去的先拿出來。

可以用數組,和一個下標模擬棧,比如一個數組a[ ](數組長度視情況而定),一個指針idex:

idex = 1;時棧爲空;

idex > 1;時1~(idex-1)都有值,即idex指向最後一個值的   後面的下標;

根據這道題,話不多說見代碼:

#include <iostream>
#include<cstdio>

using namespace std;

int main()
{
     int a[1011] = {0, 0, 0, 0};//存貯所給數據
     int b[1011] = {-1, -1, -1};//模擬棧用的數組
     int n;
     while(scanf("%d",&n), n != 0)
     {
         while(scanf("%d",&a[0]), a[0]!=0)
         {
             for(int i = 1; i < n; i++)
             {
                 scanf("%d",&a[i]);
             }

             int p = 1;//這裏的p就是上面所說得idex
            int i, j;
             for(j=1, i=0; (j<=n) || (i<n && a[i]==b[p-1]); j++)//j是A方向上依次過來的火車,i做數組a的下標
             {
                 if(a[i] == j)//j能直接走到B的方向上
                {
                     i++;
                 }
                 else
                 {
                     while(a[i] == b[p-1])//棧裏面能走到B方向上的火車都讓走出去,如果不,則下面來的火車將直接壓在它上面
                     {
                         i++;
                         p--;
                     }
                     if(j <= n)//j不能直接走到B方向上,則把它壓進棧內
                     {
                        b[p]=j;
                        p++;
                     }
                 }
             }
             if(i == n)//如果A方向上來的火車都按所給順序出去了,則數組a的下標指向n
                printf("Yes\n");
             else
                printf("No\n");
         }
        printf("\n");
     }
    return 0;
}


發佈了15 篇原創文章 · 獲贊 13 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章