C#(链栈)实现火车重排问题
2015-11-22 02:35
555 查看
实现链栈的重排:
我创建了一个TrainRoad的类,这个类就是用来进行重排操作的类,这个类主要有三个函数,1重排函数,2是进入缓冲轨道函数,3是出缓冲轨道函数,下面我们来看代码的实现:
我创建了一个TrainRoad的类,这个类就是用来进行重排操作的类,这个类主要有三个函数,1重排函数,2是进入缓冲轨道函数,3是出缓冲轨道函数,下面我们来看代码的实现:
class TrainRoad { private IStack<int>[] _allRoad; private int _nextOut = 1; private int _UniqueMaxSize; private int _len; private int _minRoad = 0; private int _minTrain; // 初始化总共的轨道数,n个缓冲+1个最终,缓冲的最大容量 public TrainRoad(int n, int max) { _allRoad = new LinkStack<int>[n + 1]; for (int i = 0; i < n + 1; i++) { _allRoad[i] = new LinkStack<int>(); } _len = n; _UniqueMaxSize = max; } // 重排函数 public void Railroad(int[] p) { int len = p.Length; _minTrain = len; for (int i = 0; i < len; i++) { if (p[i] == _nextOut) { Console.WriteLine("Move Car {0} from input to output", p[i]); _nextOut++; while (_minTrain == _nextOut) { this.OutRoad(2 * len); _nextOut++; } } else { this.IntoRoad(p[i]); } } } // 进入缓冲轨道 public void IntoRoad(int train) { int best = 0; for (int i = 0; i < _len; i++) { if (!_allRoad[i].IsEmpty() && _allRoad[i].Length <= _UniqueMaxSize) { if (train < _allRoad[i].StackTop) { best = i; Console.WriteLine("Move Car {0} from input to holding track {1}", train, i); break; } } else if (_allRoad[i].IsEmpty()) { best = i; Console.WriteLine("Move Car {0} from input to holding track {1}", train, i); break; } else { continue; } } _allRoad[best].Push(train); if (train < _minTrain) { _minTrain = train; _minRoad = best; } } // 将车厢移动到最终轨道 public void OutRoad(int len) { int train = _allRoad[_minRoad].StackTop; Console.WriteLine("Move Car {0} from holding track {1} to output", _minTrain, _minRoad); _allRoad[_minRoad].Pop(); _minTrain = len; _minRoad = 0; for (int i = 0; i < _len; i++) { if (!_allRoad[i].IsEmpty()) { int min = _allRoad[i].StackTop; if (min < _minTrain) { _minTrain = min; _minRoad = i; } } } } }
相关文章推荐
- C# 基于大整数类的RSA算法实现(公钥加密私钥解密,私钥加密公钥解密)
- C# 获取获取经纬度!
- HDU 5569 (BC#63)DP
- OOP之C#设计及其UML(反向工程)
- C#之多态
- C# WPF 实现打印预览和打印
- 关于虚方法virtual和抽象方法以及多态的研究
- c# 基本 用法
- C#中的反射例子及思考
- C#学习笔记
- C# 中的 ConfigurationManager类引用方法
- c#绘制曲线图遇到的问题
- C#基础篇总结(二)
- c#操作Excel(2)
- C# 设计时动态改变实体在PropertyGrid中显示出来的属性
- C# 自定义属性在propertyGrid控件中显示
- C# 自定义属性在propertyGrid控件中显示
- C# 设计时动态改变实体在PropertyGrid中显示出来的属性
- DirectX天空球和天空盒子模型
- 轻松学习C#的运算符