栈的应用:火车调度问题

栈的应用:火车调度

问题概述

输入第一行是一个整数N,表示车厢的数量;第二行是一个由Y于R组成的字符串,表示车厢的排列,其中Y表示硬座,R表示软座。我们的任务,是借助一个栈,使得车厢的顺序变为软座在硬座前。
输出是一个由I与O组成的字符串,代表栈的操作,I表示入栈,O表示出栈

思路分析

逐一读入火车字符串,遇到硬座,就把它入栈缓存,遇到软座,就先入栈,然后立刻出栈(相当于没有缓存),最后,当所有车厢被读入完毕,此时所有硬座都在栈内缓存,依次出栈直到栈空为止。

代🐎与注释

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>struct ListNode {char data;ListNode* Next;ListNode* Last;
};
struct List {ListNode* header;ListNode* trailer;int _size;
};void CreateList(List* l)//build the list
{l->_size = 0;l->header = (ListNode*)malloc(sizeof(ListNode));l->trailer = (ListNode*)malloc(sizeof(ListNode));l->header->Next = l->trailer;l->header->Last = NULL;l->trailer->Last = l->header;l->trailer->Next = NULL;
}void InsertList(List* l, char e)//空表,在尾节点前插入
{ListNode* np = (ListNode*)malloc(sizeof(ListNode));np->data = e;np->Next = l->trailer;np->Last = l->trailer->Last;l->trailer->Last->Next = np;l->trailer->Last = np;l->_size++;
}void PushList(List* l, char e)//入栈
{ListNode* np = (ListNode*)malloc(sizeof(ListNode));np->data = e;np->Last = l->header;np->Next = l->header->Next;np->Next->Last = np;l->header->Next = np;l->_size++;
}char PopList(List* l)//出栈
{ListNode* now = l->header->Next;char old = now->data;now->Last->Next = now->Next;now->Next->Last = now->Last;free(now);l->_size--;return old;
}int main()
{int N;//车厢总数scanf_s("%d",&N);int ready = 0;//已经处理完的车厢数List notready;CreateList(&notready);for (int i = 0; i < N+1; i++){char tmp;scanf_s("%c", &tmp);if (tmp != '\n')InsertList(&notready, tmp);}List train;//总栈CreateList(&train);char* out;out = (char*)calloc(2 * N, sizeof(char));int outhead = 0;while (1){if ( ready == N)break;else{if ((train._size == 0||train.header->Next->data=='Y')&&notready._size!=0){PushList(&train, PopList(&notready));out[outhead] = 'I';}else {PopList(&train);ready++;out[outhead] = 'O';}}outhead++;}for (int i = 0; i < 2 * N; i++)printf_s("%c", out[i]);
}

测试与结果

输入:6\n YYRYRR
输出:在这里插入图片描述

copyright swy_swy_swy , all rights reserved.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/57959.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

火车进站问题-HDUOJ

火车进站问题 问题描述 假设杭州东火车站只有一条铁路&#xff0c;并且所有火车都从一侧进来&#xff0c;从另一侧出去。那么&#xff0c;如果火车A先进站&#xff0c;然后火车B在火车A离开之前就进站&#xff0c;那么火车A直到火车B离开后才能离开&#xff0c;可参见下图。 现…

深圳大学第三期“飞鹰计划”正式开班|学以致用,扬帆起航!

金秋九月&#xff0c;丹桂飘香&#xff0c;在这个充满着收获的季节里&#xff0c;迎来了期待已久的深圳大学机电与控制工程学院飞鹰计划2022级第三期开班典礼。受疫情影响&#xff0c;虽然典礼只能在线上举行&#xff0c;但是丝毫不影响电巢专家及学生们的热情。9月17日下午&am…

写了10 年的代码,收藏了这 20 个代码生成框架!

点击上方“Java基基”&#xff0c;选择“设为星标” 做积极的人&#xff0c;而不是积极废人&#xff01; 源码精品专栏 原创 | Java 2020 超神之路&#xff0c;很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框架 Netty 源码解析消息中间件 RocketMQ 源码解析数…

matlab偏最小二乘截距,matlab代写偏最小二乘回归(PLSR)和主成分回归(PCR)

原标题&#xff1a;matlab代写偏最小二乘回归(PLSR)和主成分回归(PCR) 原文&#xff1a;http://tecdat.cn/?p2655 此示例显示如何在matlab中应用偏最小二乘回归(PLSR)和主成分回归(PCR)&#xff0c;并讨论这两种方法的有效性。当存在大量预测变量时&#xff0c;PLSR和PCR都是对…

水上飞鹰(Z缓存alpha混合)

程序的描述:水上飞鹰(Z缓存alpha混合) 作者:lun 创建日期:2005-10-5 版本:0.1 编译环境:WIN2000 VC6 SP6 DXSDK 驾驶你水上飞艇! 穿越重重危险! 程序下载地址 http://www.wungaonline.com/read.php?tid-100.html

从中关村到纳斯达克,龚宇的奇异8年与爱奇艺的全新时代

十余载岁月风云&#xff0c;视频江湖风起云涌&#xff0c;大浪淘沙后爱奇艺、腾讯视频、优酷土豆三足鼎立之势已成。 北京时间 3 月 29 日晚间&#xff0c;爱奇艺在美国纳斯达克市场敲钟上市&#xff0c;证券代码为IQ&#xff0c;IPO 定价每股 18 美元&#xff0c;照此计算&am…

linux写c语言工具,Linux下用C语言实现推箱子游戏

前面有Linux的常用命令和vim文本编辑器还没有介绍&#xff0c;之后我会补上的。 今天来介绍如何用C语言写一个简单的小游戏&#xff0c;叫做“小老鼠推箱子”。虽然游戏的编写过程不复杂&#xff0c;但是我觉得能够从中找到自己对于编程的不足和完善自己的编程思维是最重要的。…

错别字检测的软件有哪些?自动检查错别字的工具 文字校对 文本纠错 查错别字 校对软件 错别字检查 论文格式 在线校对

我们日常生活中&#xff0c;无论从事什么行业做什么工作&#xff0c;都一定会需要在电脑上打字、写文章文件&#xff0c;而大部分人都难免出现写错别字的情况。这时候就很需要自动检查错别字的软件&#xff0c;来帮助我们快速解决错别字的问题。 爱校对 错别字在线识别检测 错…

如何写好需求文档?

有一天&#xff0c;一位朋友打电话给我。 朋友&#xff1a;“听说你们公司是做产权的&#xff0c;我这有相关的项目&#xff0c;你们能做吗&#xff1f;” 老吴&#xff1a;“我们公司现在不打算接项目了&#xff0c;以做产品为主。” 朋友&#xff1a;“你在公司负责什么啊…

以梦为马,不负韶华|电巢科技延安大学飞鹰计划实习班精彩回顾

时光流淌无声&#xff0c;昨天仿佛还初次见面&#xff0c;今天却又是一年的尾声。你是否结交到亲密的小伙伴&#xff1f;你是否感受到团队合作的魅力&#xff1f;你是否在延大这片沃土得到成长&#xff1f;假如你还没答案&#xff0c;那么看看其他人的回答。 在延安大学&#x…

oracle _读取,oracle中如何读写bold类型的数据

Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用来保存例如图片之类的二进制数据。 写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个cursor,你必须使用cursor对 blob进行操作,因而你在写入Blob之前,必须获得cursor才能进行写入,那么如何…

linux下mysql 大小写敏感 设置

说明&#xff1a; MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的&#xff1a;    1、数据库名与表名是严格区分大小写的&#xff1b;    2、表的别名是严格区分大小写的&#xff1b;    3、列名与列的别名在所有的情况下均是忽略大小写的&#xff1b;…

如何用python读写excel文件_如何用Python读写Excel文件?最便捷的3种方式

python读写excel的方式有很多&#xff0c;这里我介绍3种方式&#xff0c;一种是利用xlrd和xlwt进行excel读写&#xff0c;一种是openpyxl读写&#xff0c;最后一种是利用pandas进行读写&#xff0c;下面我主要介绍一下3种方式读写的过程&#xff0c;实验环境win7python3.6pycha…

基于模型的软件开发方法综述

文章目录 前言1 基于模型的软件开发概述2模型驱动架构2.1 模型驱动的软件体系结构2.2 模型驱动的软件开发步骤 3 建模语言3.1UML3.2 SysML3.3 AADL 4 软件建模工具4.1 Rhapsody4.2 SCADE4.3 Matlab4.3.1 Matlab Coder4.3.2 Simulink Coder 4.4 其他工具4.4.1 Enterprise Archit…

(附源码)spring boot流浪动物救助系统 毕业设计180920

目 录 摘要 1 1 绪论 1 1.1 研究背景 1 1.2国内外研究现状 1 1.3论文结构与章节安排 1 2 流浪动物救助系统系统分析 3 2.1 可行性分析 3 2.2 系统流程分析 3 2.2.1 数据流程 3 3.3.2 业务流程 4 2.3 系统功能分析 4 2.3.1 功能性分析 4 2.3.2 非功能性分析 5 2.4 系统用例分析 …

大气污染扩散模型Calpuff教程

详情点击链接&#xff1a;大气污染扩散模型Calpuff教程一&#xff0c;Calpuff 1.Calpuff模型 2、Calpuff模型基础 3、Calpuff模型下载安装 1&#xff09;Calpro系统安装 2&#xff09;安装环境要求 3&#xff09;需安装的辅助软件二&#xff0c;数据预处理 1.网格设置 …

北大核心期刊2012《科技通报》杂志简介《科技通报》论文范文

北大核心期刊2012《科技通报》杂志简介《科技通报》论文范文 转载▼ 标签&#xff1a; 刘兴 柳林 科技通报 中文核心期刊 动态规划 文化 刊名&#xff1a; 科技通报 Bulletin of Science and Technology 主办&#xff1a; 浙江省科学技术协会 周期&#x…

【论文阅读】社交网络识别影响力最大节点方法综述-05

Vital nodes identification in complex networks 识别单个重要节点的方法基于结构信息一、结构中心性&#xff08;Structural centralities&#xff09;1.度中心性&#xff08;基于邻域的中心性&#xff09;2.四阶邻居信息&#xff08;基于邻域的中心性&#xff09;3.ClusterR…

【论文阅读】基于整合项目反应理论(IRT)的深度神经网络的解析自动作文评分

摘要 作文考试一直以来作为一种衡量应试者的更高等级的能力的方式吸引大家的注意&#xff0c;但是目前在对他们进行评分评定等级的时候有两个主要的缺陷&#xff0c;一是人力成本昂贵&#xff0c;二是存在公平性的问题。作为一种克服这些困难的方式&#xff0c;自动作文评分&a…

JSP基于WEB网上论坛设计与实现(源代码+论文+开题报告+答辩PPT+外文翻译)

cc学院 毕业设计&#xff08;论文&#xff09;开题报告 题 目&#xff1a; 基于JSP的学生学籍管理系统 学 科 部&#xff1a; 信工学科部 专 业&#xff1a; 计算机科学与技术 班 级&#xff1a; 学 号&#xff1a; 姓 名&#xff1a; 指导教师&#xff1a; 填表日期&…