网站大量收购独家精品文档,联系QQ:2885784924

堆栈知识详解(简单易懂).ppt

  1. 1、本文档共75页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
问题抽象 3个塔,n个碟子 初始:所有碟子放在1号塔,大的在底下,小的在上面 任务:把碟子移动到2号塔,顺序不变, 可用3号塔辅助 限制 每次只能移动一个碟子 总是大碟子在下,小的在上 递归解法 移动碟子的方法:move(n, t1, t2, t3)——将n个碟子从t1移到t2,t3辅助 可分解为3个步骤 将n-1个碟子从t1移到t3:move(n-1, t1, t3, t2) 将最大的碟子从t1移到t2 将n-1个碟子从t3移到t2:move(n-1, t3, t2, t1) 递归规则 基本情况 汉诺塔递归程序 void TowersOfHanoi(int n, int x, int y, int z) {// Move the top n disks from tower x to tower y. // Use tower z for intermediate storage. if (n 0) { TowersOfHanoi(n-1, x, z, y); cout Move top disk from tower x to top of tower y endl; TowersOfHanoi(n-1, z, y, x);} } ?moves(n)=2n-1——最少次数,Θ(2n) 汉诺塔的栈实现 #include iostream.h #include stack.h“ class Hanoi { friend void TowersOfHanoi(int); public: void TowersOfHanoi(int n, int x, int y, int z); private: Stackint *S[4]; // array of pointers to stacks }; 汉诺塔的栈实现 void Hanoi::TowersOfHanoi(int n, int x, int y, int z) { int d; // disk number if (n 0) { TowersOfHanoi(n-1, x, z, y); S[x]-Pop(d); // remove a disk from x S[y]-Push(d); // put this disk on tower y cout Move disk d from tower x to tower y endl; TowersOfHanoi(n-1, z, y, x);} } 汉诺塔栈实现 void TowersOfHanoi(int n) {// Preprocessor for Hanoi::TowersOfHanoi. Hanoi X; X.S[1] = new Stackint (n); X.S[2] = new Stackint (n); X.S[3] = new Stackint (n); for (int d = n; d 0; d--) // initialize X.S[1]-Pop(d); // add disk d to tower 1 X.TowersOfHanoi(n, 1, 2, 3); } 汉诺塔栈实现 void main(void) { cout Moves for a three disk problem are endl; TowersOfHanoi(3); } 火车车厢重排问题 货运列车,n节车厢,编号1~n 经过车站n~车站1,每站卸掉同号车厢 在始发站重新排列车厢,使得车厢按编号排列——每站卸掉最后一节车厢即可 转轨站——一个入轨、一个出轨、k个缓冲铁轨?完成重排 允许三种操作 入轨?缓冲轨 缓冲轨?出轨 入轨?出轨 图示 列车行进方向 H1.自定义的Stack类 templateclass T class Stack { public: Stack(int MaxStackSize = 10); ~Stack() {delete [] stack;} bool IsEmpty() const {return top == -1;} bool IsFull() const {return top == MaxTop;} T Top() const; StackT Push(const T x); Stac

文档评论(0)

全网精品课件 + 关注
实名认证
内容提供者

专业

1亿VIP精品文档

相关文档