随笔分类 - 数据结构
摘要:在内存存储 方面:数组是连续的,链表是分散的; 在是否预留额外空间 方面:数组需要使用前申请内存大小,链表对每个数据项都保存了下一个数据的内存地址; 在访问方式 方面:数组支持随机访问,链表只能顺序访问; 在增加、删除 方面:数组待增加、删除的节点后面的元素需要依次移动,效率低;链表只需要改变节点中
阅读全文
摘要:归并排序就是将两个或两个以上的有序表合并成一个有序表的过程 将两个有序表合并成一个有序表的过程称为2-路归并 算法过程如图所示: 相邻两个有序子序列的归并 void Merge(RedType R[], RedType &T[], int low, int mid, int high){ int i
阅读全文
摘要:选择排序的基本思想:每一趟从待排序的记录中选出关键字最小的记录,按顺序放到已排序的记录序列的最后,直到全部排完为止。 1. 简单选择排序 简单选择排序也称作直接选择排序。 算法过程如图: 算法描述: void SelectSort(SqList &L) { for (int i=1; i<L.len
阅读全文
摘要:交换排序的基本思想是:两两比较待排序记录的关键字,一旦发现两个记录不满足次序要求时则进行交换,直到整个序列全部满足要求为止。 1. 冒泡排序 冒泡排序是一种最简单的交换排序算法,通过两两比较相邻记录的关键字,使关键字小的记录如气泡一般逐渐往上“漂浮”(左移),关键字大的记录如石块一样逐渐向下“坠落”
阅读全文
摘要:1. 直接插入排序 直接插入排序是一种最简单的排序方法,基本操作是将一条记录插入到已排好序的有序表中,从而得到一个新的、记录数量增1的有序表。 直接插入排序过程: 算法描述: void insertSort(SqList &L) { for(int i=2; i<=L.length; i++) {
阅读全文
摘要:对于二叉排序树,树的高度越小,查找速度越快,因此,希望二叉树的高度尽可能小。 平衡二叉树是一种特殊类型的二叉排序树。 平衡二叉树或者是空树,或者是具有如下特征的二叉排序树: 1)左子树和右子树的深度之差的绝对值不超过1; 2)左子树和右子树也是平衡二叉树。 待补充......
阅读全文
摘要:二叉排序树,又称二叉查找树,是一种对排序和查找都很有用的特殊二叉树 定义 二叉排序树或者是一棵空树,或者具有以下定义: 1)若左子树不为空,左子树上所有结点值均小于根结点值; 2)若右子树不为空,右子树上所有结点值均大于根结点值; 3)左右子树也分别为二叉排序树。 递归定义。有定义可得性质:中序遍历
阅读全文
摘要:分块查找,又称索引顺序查找,性能介于顺序查找和折半查找之间。 需建立一个 索引表 。 索引表包括两项内容: 关键字项(其值为该子表内的最大关键字)和指针项(指示该子表的第一个记录在表中的位置)。 索引表按关键字有序,则表或者有序或者分块有序。 “分块有序”指第二个子表中所有记录的关键字均大于第一个子
阅读全文
摘要:折半查找,也称二分查找,是一种效率较高的查找方法。 要求线性表必须采用 顺序结构,表中元素按关键字 有序排列。 int Search_Bin (SSTable ST, KeyType key) { int low = 1, high = ST.length; while (low <= high)
阅读全文
摘要:顺序查找 int Search_seq(SSTable ST, KeyType key) { for(int ST.length; i>=1; i++) { if (ST[i].key == key) return i; } return 0; } 在以上查找过程中, 每一步都要检测整个表是否查找完
阅读全文
摘要:基础: 与操作:n & 0 = 0 计算机中的数字通常用二进制补码表示 如果为 正数,补码 = 源码,判断奇偶时与1相与,奇数为1,偶数为0 如果为 负数,补码->源码:保持符号位不变,其他各位取反加1,判断奇偶时仍看最后一位,先取反后加1,结果仍与原来相同。与1相与,仍是奇数为1,偶数为0 代码:
阅读全文