题目标题:铁路栈问题
铁路的调度站如下:
火车编号为: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;
代码如下:
int JudgeTrainSequence (int maxNum, char *pOutSeq)
{
stack<int> remain_stack;
remain_stack.push(1);//1入栈,栈内存放的是停留在火车站的火车编号
char *p = pOutSeq;
int index = 2;//列车编号
while (*p) //循环遍历输出序列
{
if (!remain_stack.empty() && remain_stack.top() == *p - '0') //如果栈不为空,且栈顶数字等于输出序列所指向的数字
{
remain_stack.pop();//出栈
++p;//输出指针向后移位
}
else
{
if (index == maxNum + 1) //如果计数的k大于最大值的话返回
return 0;
remain_stack.push(index++);//如果栈为空,或者当前栈顶的数不等于输出序列指针所指向的数,则将下一个数入栈,直到入栈的数等于它为止
}
}
if (remain_stack.empty()) //如果栈为空,输出序列指针也指向空退出while循环,则正确
return 1;
else
return 0;
}