个人做的课后练习
书籍:算法设计与分析基础(第三版)
习题1.4
一.
a.把最后一个元素补到第i个元素那里
b.把第i个元素之后的元素全部依次往前移一个
二.
a.用折半查找
b.依次比较每个元素,遇到等于或者大于链表中的元素的时候,退出查找。
三.
a. ab → a → acd → ac
b. ab → b → bcd → cd
五.
可以使用深度优先遍历 或者 广度优先遍历。
六.
如果在最佳的情况:完全二叉树
高度为n的完全二叉树可以容纳的元素:2的n次方 到 2的n+1次方-1
所以,如果有n个顶点,树的高度最小为 log2(n)的向下取整
在最差的情况:链表
所以高度就为 n-1
七.
a.(无序)数组
enqueue()的时候,就直接把元素添加在数组的末尾。
dequeue()的时候,就查找数组之中最大的元素,然后记录下来,把末尾元素移到最大元素的位置。返回记录的最大元素
b.(有序)数组
enqueue()的时候,就有序地把元素插入到数组里面。
dequeue()的时候,取出第一个元素。把后面的元素依次移到前一个位置。返回记录的第一个元素。
c.二叉查找树
enqueue()的时候,先执行查找功能,把带插入元素,按照左小右大,插入到最后查找到的叶子结点那里。
dequeue()的时候,从根一直向右遍历。遍历到了最后一个右子树。把这个节点的左子树补到原来这个节点的位置。放回该节点的数值。
九.
a.队列
b.队列
c.栈
十.
把每个单词的字母都按照字典序排列好。
然后就可以直接比较这些单词是否为变位词。