#include "Manage.h"
#include"malloc.h"
#include<iostream>
using namespace std;
Manage::Manage(void)
{
count_stack=0;
count=0;
stacks = new List_stack[max_stacks];
}
//重排列车厢,使其按从小到大顺序输出
bool Manage::arrange(Queue_entry a[],int n)
{
Queue_entry *b;
int m=0;//标记车厢号大小顺序
rail_queue=(Queue_entry*)calloc(n,4);//创建火车队列
b=(Queue_entry*)calloc(n,4);//创建用于给原队列标号的队列
count=n;//需重排的车厢数
//重排列数组a[]
for(int j=0;j<n;j++)
rail_queue[j]=b[j]=a[j];
bubble_sort(b,n);
max=b[count-1]+1;
stack_min=max;//初始化缓冲轨中最小的车厢标号
for (int i=0; i<count; i++)
{
carriage_num=a[i];
if(carriage_num==b[m])//直接输出
{
cout << " Move No."<<carriage_num<<" from input to output"<<endl;
m++;
while(stack_min==b[m])//从缓冲轨中输出
{
output();
m++;
}
}//end if
else if(!hold())//将不能输出的压入缓冲栈中
return false;
}//end for
cout<<"车厢重排列后输出排列如下:"<<endl;
for(int k=0;k<count;k++)
cout << b[k] <<" ";
cout<<endl<<endl;
return true;
}//end
//将暂时不能输出的车厢放入缓冲栈中,并判断是否需要创建新的栈
bool Manage::hold()
{
int best_track=-1;//拥有对于要压入车厢的最优铁轨
int best_carriage=max;//最优铁轨的最小车厢标号
int temp;//用于检索车厢的临时变量
for(int i=0;i<count_stack;i++)//查看该车厢是否可压入已有栈
{
stacks[i].top(temp);
if(carriage_num<=temp && temp<=best_carriage)
{
best_carriage=temp;
best_track=i;
}
}
if(best_track==-1 && count_stack<=max_stacks)//若不能压入已有栈,压入一空栈
{
best_track=count_stack;
count_stack++;
}
if(best_track!=-1 && count_stack>max_stacks)//若无空轨道,返回重排失败。
return false;
//输出移动过程
stacks[best_track].push(carriage_num);
cout << " Move No." << carriage_num << " from input to holding track "<< best_track << endl;
if (carriage_num<=stack_min)
{
stack_min=carriage_num;
stack_best=best_track;
}
return true;
}
//从所有缓冲栈输出车厢号最小的车厢
void Manage::output()
{
stacks[stack_best].pop();
cout << " Move No."<< stack_min << " from holding track "<< stack_best << " to output"<<endl;
//重新检索拥有最小车厢号的栈
int temp;//用于检索车厢的临时变量
stack_min=max;
for(int i=0; i<count_stack; i++)
{
if(stacks[i].empty())
continue;
stacks[i].top(temp);
if(temp<=stack_min)
{
stack_min=temp;
stack_best=i;
}//end if
}//end for
}//end
//
void Manage::bubble_sort(Queue_entry a[],int n) //冒泡排序
{
int temp;
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}//end outer for
}
没有合适的资源?快使用搜索试试~ 我知道了~
火车车厢重排列问题 堆栈解决
共31个文件
obj:7个
cpp:4个
user:3个
5星 · 超过95%的资源 需积分: 22 36 下载量 80 浏览量
2010-05-22
17:17:59
上传
评论 3
收藏 582KB RAR 举报
温馨提示
/* 应用:火车车厢重排问题 问题:一列火车要将n节车厢分别送往n个车站车站按1~n的次序编号,火车按照n, n-1,…, 1的编号次序经过车站。 假设车厢的编号就是其目的地车站的编号。 要求:给定一个任意的车厢排列次序。重新排列车厢,使其按照从1到n的次序排列。规定重排时只能从入轨 到缓冲铁轨,或者从缓冲铁轨到出轨。*/
资源推荐
资源详情
资源评论
收起资源包目录
火车车厢重排系统(1).rar (31个子文件)
火车车厢重排系统
火车车厢重排系统.ncb 2.21MB
火车车厢重排系统.sln 937B
火车车厢重排系统
List_stack.h 360B
MyNode.cpp 193B
火车车厢重排系统.vcproj.PC45.syzx.user 1KB
List_stack.cpp 948B
Debug
火车车厢重排系统.exe.embed.manifest.res 472B
火车车厢重排系统.exe.intermediate.manifest 387B
Queue.obj 30KB
vc80.idb 275KB
mt.dep 67B
Manage.obj 46KB
Carriage.obj 4KB
BuildLog.htm 6KB
List_stack.obj 28KB
MyNode.obj 22KB
火车车厢重排系统.exe.embed.manifest 405B
main.obj 44KB
MySort.obj 3KB
vc80.pdb 204KB
火车车厢重排系统.vcproj 4KB
火车车厢重排系统.vcproj.SNK-E21F225C703.qq.user 1KB
Manage.h 575B
MyNode.h 232B
main.cpp 2KB
火车车厢重排系统.vcproj.PC39.syzx.user 1KB
Manage.cpp 3KB
火车车厢重排系统.suo 23KB
debug
火车车厢重排系统.ilk 452KB
火车车厢重排系统.exe 60KB
火车车厢重排系统.pdb 555KB
共 31 条
- 1
资源评论
- Vigee2013-03-28很完整,不过是队列完成的,我需要的是堆栈。。不过也有很大参考价值。
- sunhs18322013-10-29不错,数据结构课程设计的时候可以参考下
- lusanshui2014-03-05很不错,算法分析和数据结构的大作业主要就参考这个了。
- fjclcyj2012-09-06不错,数据结构课程设计的时候可以参考下
- Captain999999992013-05-07不错,可以运行。
chp910315
- 粉丝: 0
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功