习题课线性结构.PPT

  1. 1、本文档共52页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
习题课线性结构

* * * * 解答: 入队: Stack1.push(object) 即可,复杂度O(1)。 出队: 如果Stack2非空,Stack2.pop() 即可。 ? O(1) ? 如果Stack2为空,Stack2.push(Stack1.pop()) 直到Stack1为空结束,然后Stack2.pop()即可。 O(n) 问题:如何用两个队列实现一个堆栈,分析相关操作时间复杂度。 解答: 时刻保持有一个队列空,我们假设空队列为E,另外一个为T 入栈 对空队列E执行入队操作 将另外一个队列T中的元素依次出队,并依次加入到E队列的中。同时更换两个队列的名称。 时间复杂度为O(n) 出栈 将T的首元素出队即可。 时间复杂度为O(1)。 假定数组长度为n,实现一个数组循环右移p位的算法 例如 n=8,初始状态为 1 2 3 4 5 6 7 8 p=3 终止状态为 6 7 8 1 2 3 4 5 要求时空复杂度尽可能低 问题:数组循环移位 n=8,初始状态为 1 2 3 4 5 6 7 8 p=3 终止状态为 6 7 8 1 2 3 4 5 p-n=8-3=5 先将前5个元素反序 5 4 3 2 1 6 7 8 然后将后三个元素反序 5 4 3 2 1 8 7 6 然或将整个数组反序 6 7 8 1 2 3 4 5 时间复杂度O(n), 空间复杂度O(1) Q:将一个数组所有元素反序的时空复杂度是多少? 解答: 问题:从无头单链表中删除节点 A C D E A B C D E pCurrent 解答: 思路: 将C节点的数据拷贝到B节点,然后删除C节点 Node* pNext = pCurrent-next; if(pNext!=null){ pCurrent-next = pNext-next; pCurrent-data = pNext-data; delete pNext; } 问题:检测单链表中是否存在环路 A C D E B F G H 解答: A C D E B F G H P1 P2 思路:P2指针每次走两步,P1指针每次走一步,由于初始状态下P2在P1前面,如果链表中存在环的话,P2指针一定能在某一个时刻和P1指针指向同一个节点。如果指针可以到达链表尾部表明链表中不存在环。 注意:单链表中如果有换,这个环一定在链表的尾部。 public boolean check(Node head) { Node p1 = head; // step 1 Node p2 = head.next; // step 2 while (p1 != p2) { if (p2 == null) { //如果链表中没环,一定是P2指针先到达链表尾部 return false; } p1 = p1.next; p2 = p2.next if (p2 == null) { return false; } else { p2 = p2.next; } } return true; } 解答: 问题:检测两个单链表是否相交 A C H F B E D I P1 P2 G 给出两个单链表的头指针,如P1,P2,判断这两个链表是否相交。为了简化问题,我们假设两个链表均不带环。 解答: 如果两个没有环的链表相交于某一节点的话,那么在这个节点之后的所有节点都是两个链表所共有的。 显然,如果两条链表相交,则最后一个节点一定是共有的。 先遍历第一个链表,记住最后一个节点,然后遍历第二个链表,到最后一个节点时和第一个链表的最后一个节点做比较,如果相同,则相交,如果不同就不相交。 时间复杂度为O(m+n),空间复杂度为O(1) 问题:队列中取最大值操作 假设有这样一个拥有三个操作的队列: 1.EnQueue(v):将v加入到队列中 2.DeQueue :使队列中的队首元素删除并返回此元素 3.MaxElement:返回队列中的最大元素 请设计一种数据结构和算法,让MaxElement操作的时间复杂度尽可能低 解答: 设置一个MaxVal的变量,每入队一个元素就更新MaxVal,使它总保存队列中最大元素的,MaxElement只需要直接返回MaxVal值即可,时间复杂度O(1) 这个方法对吗? 解答: 先考虑这个问题: 假设有这样一个拥有三个操作的堆栈: 1.Pu

文档评论(0)

zhuwo + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档