java队列火车厢重排_火车车厢重排(链队列)
1.题目:
Problem Description
一列货运列车共有n节车厢,每节车厢将停放在不同的车站。假定n个车站的编号分别为1~n,即货运列车按照第n站至第1站的次序经过这些车站。为了便于从列车上卸掉相应的车厢,车厢的编号应与车站的编号相同。这样,在每个车站只需卸掉最后一节车厢。因此,对于给定的任意次序车厢,必须进行重新排列,使其符合要求。车厢重排工作可通过转轨站完成,在转轨站中有一个入轨、一个出轨和k个缓冲轨,缓冲轨位于入轨和出轨之间。假定缓冲轨按先进先出的方式工作,现要求设计算法解决火车车厢重排问题。
Input
有多组数据,每组第一行为车厢节数n和缓冲轨数目k(2<=k<=5,k<=n<=10),第二行为初始给定的车厢编号次序序列。
Output
若给定的车厢编号次序序列可重排,则输出1;否则输出0。
Sample Input
9 3
3 6 9 2 4 7 1 8 5
9 3
3 6 9 2 4 7 5 8 1
Sample Output
1
0
2.参考代码:
#include
using namespace std;
struct Node{
int data;
Node* next;
};
class LinkQueue{
private:
Node* front,* rear;
public:
LinkQueue(); ///构造函数
~LinkQueue(); ///析构函数
void EnQueue(int x); ///入队列
int DeQueue(); ///出队列
int GetFront(){ ///获得队头元素
if(!empty())
return front->next->data;
}
int GetRear(){ ///获得队尾元素
if(front!=rear)
return rear->data;
}
bool empty(){ ///判断队列是否为空
if(front==0)
return true;
else
return false;
}
void Trans(); ///遍历火车车厢序列
friend void PermuteTrans(int* arr,LinkQueue* a,int n,int k); ///重排火车车厢序列
};
LinkQueue::LinkQueue(){
Node* s=new Node;
s->next=NULL;
front=rear=s;
}
LinkQueue::~LinkQueue(){
Node* p=new Node;
p->next=NULL;
front=rear=p;
}
void LinkQueue::EnQueue(int x){
Node* s=new Node;
s->data=x;
s->next=NULL;
rear->next=s;
rear=s;
}
int LinkQueue::DeQueue(){
if(!empty()){ ///队列不空才能出队
Node* p=new Node;
p=front->next;
int x=p->data;
if(p->next==NULL)
rear=front;
delete p;
return x;
}
}
void LinkQueue::Trans(){
Node* p=front->next;
while(p){
cout<data<
p=p->next;
}
}
void PermuteTrans(int* arr,LinkQueue* a,int n,int k){
int i=0;
bool flag=true; ///设置标志,初始为真
while(i
flag=false; ///改变标志
for(int j=0;j
{
if(a[j].GetRear()next==NULL)
///如果某条缓冲轨道的第一个车厢的编号小于即将进来的车厢编号,那么他就可以进入轨道
///或者某条缓冲轨道空置的时候也可以进入轨道
{
a[j].EnQueue(arr[i]); ///入队列
flag=true; ///改变标志
i++; ///下标加一
break;
}
}
}
if(flag) ///如果全部进入轨道,说明可以排
cout<<1<
else ///否则排不了
cout<<0<
}
int main()
{
int i,n,k,a[1111];
while(cin>>n>>k)
{
for(i=0;i
cin>>a[i];
LinkQueue lq;
for(i=0;i
lq.EnQueue(a[i]);
LinkQueue* H=new LinkQueue[k];
PermuteTrans(a,H,n,k);
}
return 0;
}
java队列火车厢重排_火车车厢重排(链队列)相关推荐
- java队列火车厢重排_火车车厢重排问题--队列模拟
①问题描述 一列货运列车共有n节车厢,每节车厢将停放在不同的车站.假定n个车站的编号分别为1-n,即货运列车按照第n站至第1站的次序经过这些车站.为了便于从列车上卸掉相应的车厢,车厢的编号应与车站的编 ...
- java队列火车厢重排_火车车厢重排问题
1 #include 2 #include 3 usingstd::stack;4 usingstd::cin;5 usingstd::cout;6 7 const int MAX = 100; // ...
- java队列火车厢重排_火车车厢重排——队列实现
其实队列和栈挺像的,所以也就没有单独写一个实现队列的笔记,可以参考一下栈的实现:https://www.cnblogs.com/2015-16/p/12957964.html (同时这一篇也包含 ...
- java都界面相对布局_浏览器的重排和重绘
浏览器的高层结构 1.用户界面 - 包括地址栏.前进/后退按钮.书签菜单等. 2.浏览器引擎 - 在用户界面和呈现引擎之间传送指令. 3.渲染引擎 - 负责显示请求的内容. 4.网络 - 用于网络调用 ...
- Java老鼠走迷宫流程图_老鼠走迷宫(队列实现)
1.[文件] Game.cpp ~ 2KB 下载(134) // Game.cpp: implementation of the Game class. // // #include "Ga ...
- 队列处理高并发_高并发架构消息队列面试题解析
面试题 为什么使用消息队列? 消息队列有什么优点和缺点? Kafka.ActiveMQ.RabbitMQ.RocketMQ 都有什么区别,以及适合哪些场景? 面试官心理分析 其实面试官主要是想看看: ...
- java语言描述一个行为_设计模式之责任链模式——Java语言描述
责任链模式为请求创建了一个接受者对象的链.这种模式给予请求的类型,对请求的发送者和接受者进行解耦.这种类型的设计模式属于行为模式.在这种模式下,通常每个接收者都包含对另一个接收者的引用.如果一个对象不 ...
- 消息队列控制灯代码_代码实现RabbitMQ死信队列的创建
前言: 之前有写过死信队列的使用场景以及通过管控台创建死信.这次就通过代码实现死信队列的创建,同时也分享一下RabbitMQ封装的类. 准备: 1. 先准备一个死信队列(最后用来消费)的参 ...
- 数据结构-火车车厢重排问题(队列实现)
问题描述 转轨站示意图如下: 重排过程如下: 伪代码 1. 分别对k个队列初始化: 2. 初始化下一个要输出的车厢编号nowOut = 1; 3. 依次取入轨中的每一个车厢的编号: 3.1 如果入轨中 ...
最新文章
- sklearn:sklearn.GridSearchCV函数的简介、使用方法之详细攻略
- 【学习·求职必备】入行深度学习之前,应该做好哪些准备
- 归并排序——算法系列
- 施耐德EVlink 电动车充电站有新漏洞,可导致电动车遭劫持
- 组织化视角的智慧城市
- ITIL 4 讲解:事件管理 (Incident Management)
- kubernetes核心组件的运行机制
- 教你如何使用数字组件,制作有灵魂的数据可视化大屏
- DH算法 | Diffie-Hellman 密钥交换
- 农历和阳历的之间的转换
- c语言 交通处罚单管理程序 typedef struct,交通罚单.doc
- 软考证书可积分落户、评职称、抵扣个税等,快来考一个吧!
- “云”上就诊,泽塔云超融合助力医院数字化转型
- 从“化学家”到开发者,从甲骨文到TDengine,我人生的两次重要抉择
- 给定字符串A和B,输出A和B中的最大公共子串。
- O2OA开发相关教程天梯(更新日期:2019-02-28)
- 程序员要想突破圈层,请尽快放弃技术优势!
- 蓝桥杯单片机组——程序框架及客观题
- 阿里云开发月老盲盒纸条交友小程序源码及配置教程
- Cheat Engine 基本用法