随笔分类 - 算法导论学习笔记
摘要:二叉搜索树 1、什么是二叉搜索数 对任何节点x,其左子树的关键字小于等于x.key,右子树的关键字大于等于x.key。 中序遍历可以算法可以按从小到大的顺序输出二叉搜索树的关键字。中序遍历代码如下: 中序遍历算法遍历一个含有n个节点的树,时间复杂度为Θ(n)。 作业 12.1-4 设计先序遍历算法和
阅读全文
摘要:如图所示,我们先往栈内压入一个元素a。由于两个队列现在都是空,我们可以选择把a插入两个队列中的任一个。我们不妨把a插入queue1。接下来继续网栈内压入b,c两个元素。我们把它们都插入queue1。这个时候 queue1包含3个元素a,b,c其中a位于队列的头部,c位于队列的尾部。 现在我们考虑从栈
阅读全文
摘要:使用两个栈Stack1和Stack2来实现一个队列。其中一个栈作为主存放数据的,另外一个栈作为临时存放数据的栈。具体操作如下: enqueue: 栈Stack1的入栈操作。 dequeue:将Stack1中的元素一个一个地全部依次出栈,并且在Stack1出栈的同时把出栈的元素作为参数对Stack2进
阅读全文
摘要:链表中各个对象按线性顺序排列,链表的顺序是由各个对象里的指针决定的。 链表中每个元素都是一个对象。每个对象中包含一个关键字key和两个指针prev, next分别指针这个对象的前一个对象和下一个对象。关键方法的实现代码如下:
阅读全文
摘要:队列实现的是一种先进先出(first-in, first-out, FIFIO)的策略,队列中的插入的操作称为入队(enqueue),队列的删除操作称为出队(dequeue)。 使用一个数组S[n]来实现容量为n-1的队列,定义属性head和tail分别指向对列的第一个元素和下一个新元素要插入的位置
阅读全文
摘要:栈的特征是后进先出(last-in, first-out, LIFO)。栈上的插入操作称为压入(PUSH),删除操作称为弹出(POP)。 下面使用一个数组S[n]来实现一个最多容纳n个元素的栈。定义一个属性指向最新插入的元素。栈的操作代码如下: 运行结果: 01234 43210
阅读全文
摘要:输出结果: Original array:40 44 11 43 25 0 7 14 34 14 build_max_heap: 44 43 11 40 25 0 7 14 34 14 Sorted array: 0 7 11 14 14 25 34 40 43 44
阅读全文
摘要:与归并排序一样,但不同于插入排序,堆排序的时间复杂度为O(nlgn)。与插入排序一样,但不同于归并排序,堆排序具有空间原始性,即排序过程中只需要常数个额外的元素空间来存储临时数据。 1、堆是一个数组,它可以看成一个近似的完全二叉树,树上的每个节点对应着数组中的每个元素。对于一个给定下标为 i 的元素
阅读全文