1 / 5
文档名称:

车厢重排.doc

格式:doc   大小:85KB   页数:5页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

车厢重排.doc

上传人:fanglangjizv 2019/9/18 文件大小:85 KB

下载得到文件列表

车厢重排.doc

相关文档

文档介绍

文档介绍:题目:利用队列结构实现车厢重排问题。车厢重排问题如下:一列火车共有n节车厢,每个车厢都有自己的编号,编号范围从1~n。给定任意次序的车厢,通过转轨站将车厢编号按顺序重新排成1~n。转轨站共有k个缓冲轨,缓冲轨位于入轨和出轨之间。开始时,车厢从入轨进入缓冲轨,经过缓冲轨的重排后,按1~n的顺序进入出轨。缓冲轨按照先进先出的方式,编写一个算法,将任意次序的车厢进行重排,输出每个缓冲轨中的车厢编号。提示:一列火车的每个车厢按顺序从入轨进入不同缓冲轨,缓冲轨重排后进入出轨,重新编排成一列火车。比如:编号为3的车厢进入缓冲轨1,则下一个编号小于3的车厢必须进入下一个缓冲轨2,而编号大于3的车厢则进入缓冲轨1,排在3号车厢的后面。这样,出轨的时候才可以按照从小到大的顺序重新编排。设计思路:1按题目要求缓冲轨的工作方式是先进先出(FIFO),因此是队列,由于每条缓冲轨进入的车厢数不定,采用链式队列2考虑数据的扩展性,队列以及队列元素都采用模板定义3用随机数函数生成车厢原始序列4链式队列没有可遍历结构5_getch()函数用于接收一个键盘字符,但不回显在屏幕上定义与实现:1定义节点template<classT>structNode{ Tdata; Node*next;};结构体模板,将单链表节点数据域指针域2定义链式队列template<classT>classLinkQueue{public: LinkQueue(); ~LinkQueue(); voidEnQueue(constT&x); TDeQueue(); boolEmpty(); TGet_rear();private: Node<T>*front; Node<T>*rear;};链式队列类构造函数析构函数元素T从队尾入队元素T从队首出队判断队列是否为空,如果为空返回True获得队尾元素T,用以比较缓冲轨车厢Node类型的队首指针Node类型的队尾指针3代码注意事项#ifndefCACHE#defineCACHE……#include""#endif条件预编译包含编译模型,链接所需4队列实现template<classT>LinkQueue<T>::LinkQueue(){ front=rear=NULL; }template<classT>LinkQueue<T>::~LinkQueue(){ while(front!=NULL) { rear=front->next; deletefront; front=rear; }}构造函数创建一个空队列从队首开始,逐个释放template<classT>voidLinkQueue<T>::EnQueue(constT&data){ Node<T>*enNode; enNode=newNode<T>; enNode->data=data;enNode->next=NULL; if(Empty()) front=rear=enNode; else { rear->next=enNode; rear=enNode; }}template<classT>TLinkQueue<T>::DeQueue(){ Node<T>*deNode; deNode=newNode<T>; deNode=front; front=deNode->next; T