1. 程式人生 > >根據入棧順序判斷出棧序列正確與否

根據入棧順序判斷出棧序列正確與否

題目

描述: 題目標題:鐵路棧問題

鐵路的排程站如下:

這裡寫圖片描述

火車編號為: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;
}