根据入栈顺序判断出栈序列正确与否

来源:互联网 发布:口取纸打印软件 编辑:程序博客网 时间:2024/05/02 02:09

题目

描述: 题目标题:铁路栈问题

铁路的调度站如下:

这里写图片描述

火车编号为: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;}


0 0
原创粉丝点击