铁路栈问题

题目标题:铁路栈问题 

铁路的调度站如下:

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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值