练习

题目标题:铁路栈问题

铁路的调度站如下:

1.png
火车编号为: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)
{
	if(pOutSeq == 0)return 0;
	if(maxNum < 1)return 0;
	if(strlen(pOutSeq) > maxNum)return 0;
	char* p = pOutSeq;
	while(*p != '\0'){
		if(*p < '1' || *p >('0'+maxNum))
			return 0;
		p++;
	}
	//几种常见的错误判断
	//这里进栈序列是固定由1到n。。。

	//使用数组来表示栈
	int i,j,k,seq[10],seqnum = 0;
	while(*pOutSeq != '\0')
		seq[seqnum++] = *pOutSeq++ - '0';//载入数据
	int stack[10],snum = 0;
	i = 1;//输入序列。。。
	k = 0;
	j = 0;
	while(i <= maxNum){
		//先加一个数进入栈
		stack[j++] = i++;
		while(stack[j-1] == seq[k]){
			k++;
			if(j-- == 0)break;//出栈			
		}
	}
	if( j > 0) return 0;
	else return 1;
}


你可能感兴趣的:(C++,学习)