算法导论第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 

posted @ 2012-10-17 11:09  QED  阅读(701)  评论(0编辑  收藏  举报