杭電1022題 火車進出站

2021-08-11 11:19:19 字數 1656 閱讀 9492

題目鏈結

這個題是資料型別--棧的實際應用,思路如下:

對棧和陣列in,out的處理:

三種情況:(把出站序列中的元素和棧中的元素進行比較,而不是和進站序列比較

//如果棧為空則處理第乙個資料(並且要保證能退出迴圈)

//如果棧不空並且不等於當前出站序列中的數字,則必須再將後面的標號入棧

//如果棧不為空,並且棧頂元素等於當前出站序列中的當前位置,則出棧,並讓出站序列向後,開始處理下乙個出站序列

最後判斷:

//若棧不為空,說明有列車滯留在車站中,肯定不能實現題目給出的出站序列

然後輸入格式用print陣列記錄進出站的順序,進站是1,出站是0,最後按順序列印

自己寫的**:

#include#include#define max 20 

struct stack;

int get_top(stack); //取棧頂元素**

void pop(stack&);

void push(stack&,int);

int is_empty(stack);

void input(int*,int*); //讀入火車進棧訊息

int main()

s.top=1; //對棧初始化 ,每次都要初始化

int i=1,j=1,k=1,flag=0;

getchar();

input(in,out);

for(i=1;i<=num+1;)

else

}if(!is_empty(s)&&get_top(s)!=out[j])

if(!is_empty(s)&&get_top(s)==out[j])

} if(!is_empty(s)) //若棧不為空,說明有列車滯留在車站中,肯定不能實現題目給出的出站序列

printf("no.\n");

else

} printf("finish\n");

} }

int get_top(stack s)

void pop(stack&s)

void push(stack&s,int e)

int is_empty(stack s)

void input(int*in,int*out)

//出棧資訊

scanf("%c",&ch);

i=1;

while(ch!='\n')

}

附上某位大神用c++寫的**
//ac**:

#include #include using namespace std;

int main()

if(!s.empty()&&s.top()!=out[j])//如果棧不空並且不等於當前出站序列中的數字,則必須再將後面的標號入棧

if(!s.empty()&&s.top()==out[j])

//如果棧不為空,並且棧頂元素等於當前出站序列中的當前位置,則出棧,並讓出站序列向後,開始處理下乙個出站序列

}if(s.empty()) //若棧為空,證明全部列車都已經出站,所以題目給出的出站序列有可能實現

{cout<<"yes."<

火車進出站問題 棧

編號為1,2,n的n輛火車依次進站,給定乙個n的排 列,判斷是否是合法的出站順序?思路 先把出站順序存入,用棧模擬進站的火車,按照出站的順序,依次pop出來,判斷 最後的出站數量能否達到n。include include include using namespace std const int m...

火車進出站序列問題簡述

問題描述 假設有乙個站台,只有乙個進出口,有一列火車,車廂標號從頭往後依次是1,2,3,4。問火車從頭進入站台,有多少種出站台的序列。解題思路 這裡的站台可以模擬於資料結構中的棧。棧具有先進後出 後進先出的特點,因此,任何乙個排程結果應該是 全排列中的乙個元素。由於進棧的順序是由小到大的,所以出棧序...

火車進出站加全排列

題目描述 給定乙個正整數n代表火車數量,0輸出描述 輸出以字典序從小到大排序的火車出站序列號,每個編號以空格隔開,每個輸出序列換行,具體見sample。示例1輸入複製3 1 2 3 輸出複製 1 2 3 1 3 2 2 1 3 2 3 1 3 2 1 include include include ...