算法导论第10章习题

10.1-1 略

10.1-2 把这个数组的头和尾各当成一个stack就好了,如果一个stack在push的过程中发现已经有值了就说明放满了。

10.1-3 略

10.1-4 ENQUE,DEQUE中只要判断一下是否有值,是否没有值就好了

10.1-5 deque就不多说了

10.1-6 两个栈实现一个队列。设栈A和栈B代表这个队列。如果向队列插入一个元素就是向栈A压入一个元素。出队列就是从栈B中弹出一个元素,如果B没有元素,就把A中的元素弹出再压入B。只是出队列的时间复杂度最坏有O(n).

10.1-7 两个队列实现一个栈。入栈就是向一个队列插入。出栈就是从另外一个队列弹出。如果没有的话,就把另外一个队列中的元素弹出再压入这个队列。最坏也可能有O(n)

10.2-1 可以,不可以

10.2-2 在单链表上的头上插入删除。

10.2-3 在单链表上的头删除,在尾巴插入。

10.2-4 key[nil[L]] = k,函数结束的时候在擦掉。好贱。。。。

10.2-5 略。因为在插入删除的时候都需要判断是否有在dictionary里,所以都TMD要扫一遍。所以复杂度是O(n)

10.2-6 因为要O(1)所以单链表的从头扫到尾就不行了,都用double linked lists。把S1和S2拼起来就好了。

10.2-7 只要维护2个指针p,q,next[p]指向q。把next[q]用r存储起来,令指向p。p=q,q=r就好。

10.2-8 我比较在意题目中的Be sure to describe what information is needed to access the head of the list.如果nil[L]中存np的话,得不到head[L],因为需要tail[L]。所以nil[L]的np应该直接存储next, prev和np。每经过一个node,都要用前面的node地址和np做xor,得到下一个node的地址。如果要反着来,就要存储下一个地址,和np做xor,得到上一个node的地址。

10.3-1 略

10.3-2 allocate-object 先判断一下free是否为null,x=free,free=A[x+1]。free-object next[x+1]=free, free=x。

10.3-3 反正allocate出来的东西是用来写的,free出来的东西为的是以后写的,所以不用管啦

10.3-4 

转载于:https://www.cnblogs.com/starry4d/archive/2012/10/17/2381660.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值