【数据结构】使用栈解决火车硬席(H)和软席(S)的调度问题
- 说明:这是武汉理工大学计算机学院【数据结构】课程实验:使用栈解决火车硬席(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)的调度问题相关推荐
- 数据结构——用栈解决回文字符问题
回文 回文是指正读反读均相同的字符序列,如"abba"和"abdba"均是回文,但"good"不是回文.试写一个算法判定给定的字符序列是否为 ...
- 【js数据结构】栈解决佩兹糖果盒问题
现实生活中栈的一个例子是佩兹糖果盒. 想象一下你有一盒佩兹糖果, 里面塞满了红色. 黄色和白色的糖果, 但是你不喜欢黄色的糖果. 使用栈( 有可能用到多个栈) 写一段程序, 在不改变盒内其他糖果叠放顺 ...
- [数据结构] python 栈解决迷宫问题
例:给一个二维列表(如图所示),表示迷宫(0表示通道,1表示围墙).给出算法,求一条走出迷宫的路径. 栈--深度优先搜索(回溯法) 思路:使用栈存储当前路径.从一个节点开始,任意找下一个能走的点,当找 ...
- 利用顺序栈解决括号匹配问题(c++)-- 数据结构
利用顺序栈解决括号匹配问题(c++)-- 数据结构 参考文章: (1)利用顺序栈解决括号匹配问题(c++)-- 数据结构 (2)https://www.cnblogs.com/yi2105/p/106 ...
- 数据结构链表之栈——解决括号匹配问题和逆波兰表达式求值问题——6
括号匹配问题和逆波兰表达式求值问题 基于上一节已经使用python代码对栈进行了简单的实现,这一节我们在其基础上解决两个常见的问题 案例 括号匹配问题(点我直接到代码实现) 逆波兰表达式求值问题(点我 ...
- # 数据结构---1.栈的实现
数据结构-1.栈的实现 注:虽然学完了一遍栈的应用,但我还是不能给出关于栈的定义.我能理解它作为一种记录数据或者删除数据的一种操作.但是,栈解决了什么问题,有什么注意事项,还有什么高阶操作,我暂时也不 ...
- 数据结构--链栈的c语言实现(超详细注释/实验报告)
数据结构–链栈的c语言实现(超详细注释/实验报告) 知识小回顾 栈(Stack)作为一种限定性线性表,是将线性表的插入和删除操作限制为仅在表的一端进行,通常将表中允许进行插入.删除操作的一端成为栈顶( ...
- 2022-11-16 每日打卡:单调栈解决最大矩形问题(一维直方图,二维最大红矩形)
每日打卡:单调栈解决最大矩形问题(一维直方图,二维最大红矩形) 柱状图中最大的矩形 思路 这个题最明显的思路就是:矩形面积=底×高. 版本1:底的长度可以通过二重循环来完成,高通过循环来寻找最小值. ...
- Java基础加强重温_05:Iterator迭代器、增强for循环、集合综合案例-斗地主、数据结构(栈、队列、数组、链表、红黑树)、List接口、Set接口
摘要: Java基础加强重温_05: Iterator迭代器(指针跟踪元素). 增强for循环(格式.底层). 集合综合案例-斗地主(代码规范抽取代码,集合元素打乱). 数据结构[栈(先进后出,子弹夹 ...
- 【数据结构】栈、队列、堆的python实现
[数据结构]栈.队列.堆的python实现 一.栈的python实现 1.1.栈的列表实现方法 1.2.用双向队列模拟栈 二.队列的python实现 2.1.队列的列表实现 2.2.使用deque实现 ...
最新文章
- linux 内核 fork,《Linux内核分析》之分析fork函数对应的系统调用处理过程
- 仓库管理系统gitlab
- 防火墙双机热备三大协议(VRRP-VGMP-HRP)原理
- JavaScript 引擎和 Just-in-Time 编译概念,Hot Function 的简单介绍
- 一年5篇EI,一篇一级学报,经验略谈
- Spring : 连接池-HikariCP
- DarkSide从Colonial Pipeline收取赎金的比特币地址已被找到
- 稳恒nb-iot模块WH-NB73 UDP透传和透传云使用说明
- html前端命名规则
- Excel小技巧-获取列数
- 如何将图片文字转换成word
- RocketMQ创建topic流程解析
- Apache服务器下载安装及使用(更新)
- 普通人跨考浙大计算机的经验贴(2019)
- 在 Arch Linux 上使用人脸识别(howdy)来登陆和认证
- ubuntu20安装gcc_Ubuntu:软件常用安装方法(附WPS安装)
- Vue.js前端开发实战总结(1)
- Java练习题-09
- 暴风魔镜VR(第一人称和第三人称)
- cloudreve 使用阿里云 oss 和 cdn 加速
热门文章
- (微信定时发送消息)一个java文件,完成可配置的微信定时发送消息任务
- Android 之 日期时间 时区同步
- [已解决]关于python无法显示中文的问题:SyntaxError: Non-ASCII character '\xe4' in file test.py on line 3, but no enc
- ab153x-ut apk 洛达1562a蓝牙检测工具 真)
- java中未处理的异常_Java中未处理的异常
- iOS Presenting view controllers on detached view controllers is discouraged
- 发送短信验证码及调用短信接口与C# 后台 post 发送
- .NET MVC同页面显示从不同数据库(mssql、mysql)的数据
- 微信公众号发送模板通知
- SNN系列|学习算法篇(1)Tempotron