
数据结构与算法
周先森x
这个作者很懒,什么都没留下…
展开
-
单链表上的直接插入排序
void InsertSort(List* lst) { Node *unsorted, *sorted, *p, *q; if (lst->First != NULL) { /*判断空链表*/ sorted = lst->First; // sorted首先 指向第一个结原创 2014-07-16 22:00:54 · 7994 阅读 · 0 评论 -
【数据结构与算法】《编程之美: 求二叉树中节点的最大距离》的另一个解法
昨天花了一个晚上为《编程之美》,在豆瓣写了一篇书评《迟来的书评和感想──给喜爱编程的朋友》。书评就不转载到这里了,取而代之,在这里介绍书里其中一条问题的另一个解法。这个解法比较简短易读及降低了空间复杂度,或者可以说觉得比较「美」吧。问题定义如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点原创 2014-09-24 16:28:00 · 98 阅读 · 0 评论 -
【数据结构与算法】红黑树的优点
红黑树是一种很有意思的平衡检索树。它的统计性能要好于平衡二叉树(有些书籍根据作者姓名,Adelson-Velskii和Landis,将其称为AVL-树),因此,红黑树在很多地方都有应用。在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操作的支持)。原创 2014-09-15 19:22:12 · 433 阅读 · 0 评论 -
【数据结构】散列表总结
总结:线性探查表基本操作中的关键删除:不改变标志位,关键字值改为NeverUsed搜索:终止条件:遇到标志位为True或回到h(key)插入:找到的第1个空关键字处,其值为NeverUsed 线性探查法的缺点:易使元素在表中连成一片,使得探查次数增加,影响搜索效率改进方法:1、二次探查法 二次探测法使用下列探测序列进行探测,直到某个位置为空时,将关键字原创 2014-09-13 10:09:03 · 879 阅读 · 0 评论 -
位运算应用技巧
非常有用的位运算技巧一提起位运算,人们往往想到它的高效性,无论是嵌入式编程还是优化系统的核心代码,适当的运用位运算总是一种迷人的手段,或者当您求职的时候,在代码中写入适当的位运算也会让您的程序增加一丝亮点,最初当我读《编程之美》求“1的数目”时,我才开始觉得位运算是如此之美,后来读到 《Hacker's Delight》,感慨到Henry S.Warren把位运算运用的如此神出鬼没,很原创 2014-09-22 10:58:04 · 261 阅读 · 0 评论 -
使用异或交换数据值的原理
大家都知道,假如有a,b两个整型数,我们可以用a^=b;b^=a;a^=b;来交换a,b的值,在这里我说说其中的原理:^ 在 C 里面是按位异或操作符,相同的话异或的结果就是 0,不同的话就是 1。举个例子,比如 a 表示十进制的 5,b 表示十进制的 12,按位异或结果就是:a = 0101 (5 的二进制表示)b = 1100 (12 的二进制表原创 2014-09-22 10:50:44 · 620 阅读 · 0 评论 -
用malloc分配动态二维数组与m个指针数组
假设我需要一个nrows、 ncolumns数组,则可以用以下几种方法动态分配空间:1. 动态数组的成员都可以用正常的数组下标 Array[i][j]原创 2014-08-10 01:12:10 · 503 阅读 · 0 评论 -
【数据结构之八大内排序】归并排序
稳定最差:O(nlogn)[MergeSort的size取值不超过logn取上整,即最多进行logn取上整趟排序。对每一遍的size的都要扫描n个记录,所以函数MergeSort的运行时间为O(nlogn)]平均:O(nlogn)最好:O(nlogn)空间:O(n)[合并排序需要与原序列长度的辅助数组Temp,所需的额外空间为O(n)]原创 2014-09-04 15:20:19 · 267 阅读 · 0 评论 -
【数据结构之八大内排序】插入排序(直接插入排序、希尔排序)
/** 稳定 * 最坏时间复杂度:O(n2) * 平均时间复杂度:O(n2)* 最好时间复杂度:O(n)* 空间复杂度:O(1)** 描述:将一个记录看成是一个有序子序列,将以后的n-1个记录,依次插入到一个已经有序的子序列中去,使得每次插入记录后的子序列也是有序的。 * 核心操作是将一个记录插入到一个有序子序列中,使得该序列在插入后依然是有序的。 **/原创 2014-09-04 15:00:53 · 329 阅读 · 0 评论 -
【数据结构之八大内排序】交换排序(冒泡排序,快速排序)
第一部分:交换排序原创 2014-09-04 14:30:40 · 384 阅读 · 0 评论 -
单链表上的插入排序
指针p指示表中与待插入的记录比较的结点,P指向链表序列中第一个比待插入元素大的元素q指示p的前驱结点。指针sorted总是指向单链表中已经有序的部分子表的尾部,而指针unsorted指向sorted的后继结点,即待插入的记录结点原创 2014-07-16 22:07:21 · 311 阅读 · 0 评论 -
【数据结构之八大内排序】选择排序(简单选择,堆排序)
简单选择不稳定最差时间:O(n)平均时间:O(n)最好时间:O(n)空间:O(1)原创 2014-09-04 15:09:35 · 383 阅读 · 0 评论