[华为机试练习题]26.铁路栈问题

题目

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

铁路的调度站如下:

这里写图片描述

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

练习阶段: 高级

代码

/*---------------------------------------
*   日期:2015-07-01
*   作者:SJF0115
*   题目:铁路栈问题 
*   来源:华为机试练习题
-----------------------------------------*/
#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;
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@SmartSi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值