顺序栈ADT模板简单应用算法设计:火车调度

问题描述 :
问题描述:
  • 目的:使用C++模板设计顺序栈的抽象数据类型(ADT)。并在此基础上,使用顺序栈ADT的基本操作,设计并实现简单应用的算法设计。

  • 内容:

    • (1)请参照顺序表的ADT模板,设计顺序栈的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考教材、课件,以及网盘中的顺序表ADT原型文件,自行设计顺序栈的ADT。)

    • (2)ADT的简单应用:使用该ADT设计并实现若干应用顺序栈的算法设计。

  • 应用2:若按教科书3.1.1节中图3.1(b)所示铁道进行车厢调度(注意:两侧铁道均为单向行驶道)。假设该火车调度站的入口处有n节硬席或软席车厢(分别以Hi和Sj表示,i、j代表各自的序号。)等待调度。要求设计一个算法,使用顺序栈,输出对这n节车厢进行调度的结果序列,使得所有的软席车厢都被调整到硬席车厢的前面,并且软席车厢顺序保持和原来一致,但硬席车厢顺序颠倒。
    在这里插入图片描述

参考函数原型:

template<class ElemType>

string Conversion(SqStack<ElemType> &S, string &train); 

字符串train代表初始的车厢排列序列,车厢和车厢之间以空格分隔。算法函数的返回值为调度结果。

输入说明 :

第一行:初始的车厢排列序列

输出说明 :

第一行:调度结果

输入范例 :
H25 S31 S20 H12 S9 H10 H5 H2 S1
输出范例 :
S31 S20 S9 S1 H2 H5 H10 H12 H25 
问题分析
  • 软席车厢不变,说明,软席车厢直接不入栈
  • 硬席车厢顺序颠倒,硬席车厢全部入栈,然后再出栈
  • 遍历整个排序的序列,软席车厢不入栈,硬席车厢入栈,遍历完直接输出栈
使用stream流去实现的字符串的切片和分割

此部分借鉴按照空格切割字符串

#include<iostream>
#include<string>
#include<sstream>
#include<vector>
using namespace std;

int main(){
    //用于存放分割后的字符串 
    vector<string> res;
    //待分割的字符串,含有很多空格 
    string word="   Hello, I want   to learn C++!   ";
    //暂存从word中读取的字符串 
    string result;
    //将字符串读到input中 
    stringstream input(word);
    //依次输出到result中,并存入res中 
    while(input>>result)
        res.push_back(result);
    //输出res 
    for(int i=0;i<res.size();i++){
        cout<<res[i]<<endl;
    }
    return 0;
}

if(temp.at(0) == ‘S’)
{
cout<<temp<<" ";
}
else
{
S.push(temp);
}

伪代码实现
void Conversion(SqStack &S, string &train)
{

    string temp;
    stringstream input;
    input << train;

    //scan all the elements of the elements
    while(input >> temp)
    {
        if(temp.at(0) == 'S')
        {
            cout<<temp<<" ";
        }
        else
        {
            S.push(temp);
        }
    }

    //pop all the element in the stack
    while(!S.StackisEmpty())
    {
        S.pop(temp);
        cout<<temp<<" ";
    }
}
事故现场
第一次提交

在这里插入图片描述

  • 格式不正确,只有一种可能,那就是的如果全部都是软卧,那就会在末尾错多输出一个空格,因为仅仅只对H列表进行了格式控制
    在这里插入图片描述

  • 增加对S格式控制的语句
    在这里插入图片描述

第四次提交

在这里插入图片描述

  • 这就很离谱了,还是错的,反而错的更多的,但是没有那么多时间了,就买样例吧
    在这里插入图片描述
  • 是真的扯,他居然在末尾也加了空格,这就很无语了
最后一次提交

在这里插入图片描述

分析与总结
  • string流比string要好用多了,应该花功夫去研究一下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值