根據入棧順序判斷出棧序列正確與否
阿新 • • 發佈:2019-02-20
題目
描述: 題目標題:鐵路棧問題
鐵路的排程站如下:
火車編號為:1~9,且不重複。
如:編號分別為“1”、“2”、“3”、“4”、“5”的5個火車順序進站,那麼進站序列為“12345”,全部進站後再順序出站,則出站序列為“54321”,如果先進1,2,然後2出站,然後1出站,然後再3進站、出站,4進站、出站,5進站、出站,那麼出站序列就為21345.
詳細描述:
int JudgeTrainSequence (int maxNum, char *pOutSeq);
輸入引數:
int maxNum:進站的火車最大編號 char* pOutSeq:使用字串表示火車出站序列
輸出引數(指標指向的記憶體區域保證有效):
無。
返回值:
Int: 根據輸入的進站序列判斷,如果輸入的出站序列是可能的,返回1,否則返回0;
練習階段: 高階
程式碼
#include <iostream> #include <string.h> #include <stack> using namespace std; /* 詳細描述: int JudgeTrainSequence (int maxNum, char *pOutSeq); 輸入引數: int maxNum:進站的火車最大編號 char* pOutSeq:使用字串表示火車出站序列 輸出引數(指標指向的記憶體區域保證有效): 無。 返回值: Int: 根據輸入的進站序列判斷,如果輸入的出戰序列是可能的,返回1,否則返回0; */ int JudgeTrainSequence (int maxNum, char *pOutSeq){ if(pOutSeq == NULL || maxNum <= 0){ return 0; }//if int size = strlen(pOutSeq); stack<int> trainSeq; // 初始 int index = 1; for(int i = 0;i < size;){ if(trainSeq.empty() || trainSeq.top() < pOutSeq[i] - '0'){ trainSeq.push(index); ++index; }//if else{ trainSeq.pop(); ++i; }//else }//for if(!trainSeq.empty()){ return 0; }//if return 1; }