• 说明:这是武汉理工大学计算机学院【数据结构】课程实验:使用栈解决火车硬席(H)和软席(S)的调度问题
  • 武汉理工大学计算机专业课程资料汇总:https://cxhit.blog.csdn.net/article/details/112465790
  • >>点击查看WUTer计算机专业实验汇总
  • 谨记:纸上得来终觉浅,绝知此事要躬行。

解决问题描述:

  火车调度站的入口处有n节硬席或软席车厢(分别以H和S表示)等待调度,试编写算法,输出对这n节车厢进行调度的操作(即入栈或出栈操作)序列,以使所有的软席车厢都被调整到硬席车厢之前。

源代码:

// *.cpp: 定义控制台应用程序的入口点。#include <iostream>
using namespace std;#define STACK_INIT_SIZE 100
#define STACKINCREASE 10
#define SElemType char
#define Status int
#define OK 1
#define OVERFLOW 0
#define ERROR -1typedef struct {SElemType *base;SElemType *top;int stacksize;
}SqStack;//构造空栈S
Status InitStack(SqStack &S) {S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));if (!S.base) return OVERFLOW;S.top = S.base;S.stacksize = STACK_INIT_SIZE;return OK;
}//取栈顶元素
Status GetTop(SqStack S, SElemType &e) {if (S.top == S.base){     //如果栈为空,返回错误return ERROR;}e = *(S.top - 1);return OK;
}//入栈操作
Status Push(SqStack &S, SElemType e) {if (S.top - S.base >=S.stacksize) {    //栈满,追加空间S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREASE) * sizeof(SElemType));if (!S.base) return ERROR;      //存储空间分配失败S.top = S.base + S.stacksize;S.stacksize += STACKINCREASE;}*S.top = e;S.top++;return OK;
}//出栈操作
Status Pop(SqStack &S, SElemType &e) {if (S.top == S.base) return ERROR;e = *--S.top;return OK;
}int main()
{SqStack S;InitStack(S);char coach[80];cout << "硬席车厢请用字母“H”表示、软席车厢请用字母“S”表示\n";cout << "请输入车厢序列:";cin >> coach;cout << "输入成功!待调度车厢序列:" << coach << endl;int i = 0, j = 0;while (coach[i]) {if (coach[i] == 'H') {   //如果是硬席车厢Push(S, coach[i]);   //执行入栈操作i++;}else{coach[j] = coach[i]; //如果是软席车厢,j++;    i++;         //将其从数组coach的第一个开始覆盖插入}}                            //结束循环,栈中为H,数组中前j个为Sfor (j ;coach[j] ;j++)   {    //将栈中的H出栈,覆盖到coach数组第j个后面Pop(S, coach[j]);}cout << "调度成功!调度后车厢序列:";cout << coach << endl;        //输出调度之后的序列return 0;
}

运行结果截图:

【数据结构】使用栈解决火车硬席(H)和软席(S)的调度问题相关推荐

  1. 数据结构——用栈解决回文字符问题

    回文 回文是指正读反读均相同的字符序列,如"abba"和"abdba"均是回文,但"good"不是回文.试写一个算法判定给定的字符序列是否为 ...

  2. 【js数据结构】栈解决佩兹糖果盒问题

    现实生活中栈的一个例子是佩兹糖果盒. 想象一下你有一盒佩兹糖果, 里面塞满了红色. 黄色和白色的糖果, 但是你不喜欢黄色的糖果. 使用栈( 有可能用到多个栈) 写一段程序, 在不改变盒内其他糖果叠放顺 ...

  3. [数据结构] python 栈解决迷宫问题

    例:给一个二维列表(如图所示),表示迷宫(0表示通道,1表示围墙).给出算法,求一条走出迷宫的路径. 栈--深度优先搜索(回溯法) 思路:使用栈存储当前路径.从一个节点开始,任意找下一个能走的点,当找 ...

  4. 利用顺序栈解决括号匹配问题(c++)-- 数据结构

    利用顺序栈解决括号匹配问题(c++)-- 数据结构 参考文章: (1)利用顺序栈解决括号匹配问题(c++)-- 数据结构 (2)https://www.cnblogs.com/yi2105/p/106 ...

  5. 数据结构链表之栈——解决括号匹配问题和逆波兰表达式求值问题——6

    括号匹配问题和逆波兰表达式求值问题 基于上一节已经使用python代码对栈进行了简单的实现,这一节我们在其基础上解决两个常见的问题 案例 括号匹配问题(点我直接到代码实现) 逆波兰表达式求值问题(点我 ...

  6. # 数据结构---1.栈的实现

    数据结构-1.栈的实现 注:虽然学完了一遍栈的应用,但我还是不能给出关于栈的定义.我能理解它作为一种记录数据或者删除数据的一种操作.但是,栈解决了什么问题,有什么注意事项,还有什么高阶操作,我暂时也不 ...

  7. 数据结构--链栈的c语言实现(超详细注释/实验报告)

    数据结构–链栈的c语言实现(超详细注释/实验报告) 知识小回顾 栈(Stack)作为一种限定性线性表,是将线性表的插入和删除操作限制为仅在表的一端进行,通常将表中允许进行插入.删除操作的一端成为栈顶( ...

  8. 2022-11-16 每日打卡:单调栈解决最大矩形问题(一维直方图,二维最大红矩形)

    每日打卡:单调栈解决最大矩形问题(一维直方图,二维最大红矩形) 柱状图中最大的矩形 思路 这个题最明显的思路就是:矩形面积=底×高. 版本1:底的长度可以通过二重循环来完成,高通过循环来寻找最小值. ...

  9. Java基础加强重温_05:Iterator迭代器、增强for循环、集合综合案例-斗地主、数据结构(栈、队列、数组、链表、红黑树)、List接口、Set接口

    摘要: Java基础加强重温_05: Iterator迭代器(指针跟踪元素). 增强for循环(格式.底层). 集合综合案例-斗地主(代码规范抽取代码,集合元素打乱). 数据结构[栈(先进后出,子弹夹 ...

  10. 【数据结构】栈、队列、堆的python实现

    [数据结构]栈.队列.堆的python实现 一.栈的python实现 1.1.栈的列表实现方法 1.2.用双向队列模拟栈 二.队列的python实现 2.1.队列的列表实现 2.2.使用deque实现 ...

最新文章

  1. linux 内核 fork,《Linux内核分析》之分析fork函数对应的系统调用处理过程
  2. 仓库管理系统gitlab
  3. 防火墙双机热备三大协议(VRRP-VGMP-HRP)原理
  4. JavaScript 引擎和 Just-in-Time 编译概念,Hot Function 的简单介绍
  5. 一年5篇EI,一篇一级学报,经验略谈
  6. Spring : 连接池-HikariCP
  7. DarkSide从Colonial Pipeline收取赎金的比特币地址已被找到
  8. 稳恒nb-iot模块WH-NB73 UDP透传和透传云使用说明
  9. html前端命名规则
  10. Excel小技巧-获取列数
  11. 如何将图片文字转换成word
  12. RocketMQ创建topic流程解析
  13. Apache服务器下载安装及使用(更新)
  14. 普通人跨考浙大计算机的经验贴(2019)
  15. 在 Arch Linux 上使用人脸识别(howdy)来登陆和认证
  16. ubuntu20安装gcc_Ubuntu:软件常用安装方法(附WPS安装)
  17. Vue.js前端开发实战总结(1)
  18. Java练习题-09
  19. 暴风魔镜VR(第一人称和第三人称)
  20. cloudreve 使用阿里云 oss 和 cdn 加速

热门文章

  1. (微信定时发送消息)一个java文件,完成可配置的微信定时发送消息任务
  2. Android 之 日期时间 时区同步
  3. [已解决]关于python无法显示中文的问题:SyntaxError: Non-ASCII character '\xe4' in file test.py on line 3, but no enc
  4. ab153x-ut apk 洛达1562a蓝牙检测工具 真)
  5. java中未处理的异常_Java中未处理的异常
  6. iOS Presenting view controllers on detached view controllers is discouraged
  7. 发送短信验证码及调用短信接口与C# 后台 post 发送
  8. .NET MVC同页面显示从不同数据库(mssql、mysql)的数据
  9. 微信公众号发送模板通知
  10. SNN系列|学习算法篇(1)Tempotron