- 1、本文档共48页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章的 队列
Hold函数 bool Hold(int c,int minH, int minQ,LinkedQueueint H[], int k) { int BestTrack = 0,BestLast = 0, x; for (int i = 1; i = k; i++) //通过循环确定最优缓冲轨 if (!H[i].IsEmpty()) { x = H[i].Last(); if (c x x BestLast) { BestLast = x; BestTrack = i;} } else if (!BestTrack) BestTrack = i; if (!BestTrack) return false; //如果所有缓冲轨都不能添加车厢c H[BestTrack].Add(c); coutMove car c from input “ to holding track BestTrack endl; if (c minH) //如果c添加到了一条空缓冲轨且cminH {minH = c; minQ = BestTrack;} return true; } 要缓冲的车厢号 如果该缓冲轨上已有车厢: 观察其①可否添加?cx ②是否最大?xBestLast 只有非空缓冲轨都不行时,才考虑当前为空的缓冲轨 * 本节课我们学习了: 队列的定义和操作方式 队列的两种存储形式 顺序、链表 队列的典型应用 车厢重排 * 思考和练习 2 3 9 * * 但是:队尾到达数组尾怎么办 rear==MaxSize – 1时进行Add操作 front 0 队列移动到数组头部(front?0),再Add,Θ(n) front==0,失败 改进了Delete但Add变差,最坏情况仍为Θ(n) * 思路3:循环数组描述方法 * 循环数组描述方法 把数组扭成环——首尾相连是关键 最后一个元素之后是第一个元素 location(i)=(location(1)+i–1) % MaxSize front——location(1) – 1 rear——最后一个元素在数组中的位置 插入、删除均为Θ(1) * 小问题:队列空和满的区分 队列空——front == rear 队列满——front == rear 混淆! 简单解决方法【最终方案】 只允许最多MaxSize-1个元素 队列空:front == rear 队列满:front == (rear + 1) % MaxSize * 队列的公式化描述 templateclass T class Queue {// FIFO objects public: Queue(int MaxQueueSize = 10); ~Queue() {delete [] queue;} bool IsEmpty() const {return front == rear;} bool IsFull() const { return (((rear + 1) % MaxSize == front) ? 1 : 0);} T First() const; // return front element T Last() const; // return last element QueueT Add(const T x); QueueT Delete(T x); * 循环数组描述 private: int front; //队首 int rear; // 队尾 int MaxSize; // 队列容量 T *queue; // element array }; * 构造函数 templateclass T QueueT::Queue(int MaxQueueSize) {// Create an empty queue whose capacity MaxSize = MaxQueueSize + 1; queue = new T[MaxSize]; front = rear = 0; } T:基本类型, Θ(1)T:用户自定义类, Θ(MaxSize) 留出1个额外空间 * First temp
文档评论(0)