看数据结构写代码(61) 哈希表

前面说的 各种查找都是 基于 “比较” 的基础 来进行 查找的。查找的 效率 要 看 比较的 次数。那么 有没有 不需要 比较,就可以 找到 想要的数据的 方法呢? 哈希表 就是 这样的 一种方法,它用  数组 作为 保存 关键字的 数据原型,通过 一个 哈希 函数f(k),来找到 关键字 存储的...

2015-04-30 10:14:46

阅读数:440

评论数:0

看数据结构写代码(60 ) 键树的多重链表表示(Trie树)

trie树,是用 树的 多重链表来表示 树的。每个节点 有 d 个指针域。若从键树中的某个节点到叶子节点的路径上每个节点都只有一个孩子,则可以把 路径上的所有节点压缩成一个叶子节点,且在叶子节点中 存储 关键字 以及 根关键字相关的信息。 当节点的度 比较大时,选择 Trie树,要比 双链表树更...

2015-04-29 12:35:06

阅读数:1243

评论数:0

看数据结构写代码(59) 键树的双链表示法

杂谈; 打败自己的 往往不是敌人,而是自己。坚持不易,且行且珍惜。 键树 是一种 把  把  非叶子节点 当成索引,叶子节点保存具体信息的一种树。 例如:   它的 键树形式如下: 键树 有 两种 表示 方法:1. 双链表 表示法 ,就是 树的 孩子链表 表示法   2.多重链表表示法(...

2015-04-28 21:59:51

阅读数:708

评论数:0

看数据结构写代码(58) B-树

B-树 一种 自平衡的 多路 查找树。它在文件系统里很有用。 一个m阶的B-树,要么是空树,要么是满足这些特性的树。、 1.树 最多 有 m个分支。 2.树的根 最少 两个子树。 3. 树的非终端叶子节点 最少  m/2 向上 取整   个 子树。 4.所有叶子节点 都在 一层。 它的节点 结...

2015-04-24 12:16:55

阅读数:683

评论数:0

看数据结构写代码(57) AVL树的删除

上一节 已经说了 AVL树的插入 操作,可是 只有 插入,没有删除,怎么能叫 动态 查找表呢。 呵呵,博主 赶紧 去 研究了一番。下面 是成果: AVL树的删除 大致 分为 两大块: 1. 查找节点 并 删除 2. 保持 删除 后 平衡因子的 影响 1. 首先 找到 这个 节点,如果 节点...

2015-04-22 11:46:08

阅读数:566

评论数:0

看数据结构写代码(56) 平衡二叉树(AVL树)

平衡二叉树的定义 (AVL—— 发明者为Adel'son-Vel'skii 和 Landis)   平衡二叉查找树,又称 AVL树。 它除了具备二叉查找树的基本特征之外,还具有一个非常重要的特点:它 的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值(平衡因子 ) 不超过1。 ...

2015-04-21 14:28:42

阅读数:611

评论数:0

看数据结构写代码(55) 二叉排序树

二叉排序树 是一种 动态 查找树,它的 创建 是在 查找中 生成的。 当 查找 失败时,它将 数 插入到 合适的 位置中去。 二叉查找树的 左子树上的值 父亲的 值 小,而 右子树上的值 总是 比 父节点 大。这样 查找 类似与 二分 查找,其 最多 查找 的 次数 等于 树的 深度。 ...

2015-04-20 20:44:56

阅读数:530

评论数:0

看数据结构写代码(54)次优查找树

查找顺序表时,若 每个元素的概率 都相等 用 二分查找 效率 最高。但是 如果 概率 不相等时,(SOST)静态最优查找表 效率 要高于 二分查找。静态最优查找表 是 使得 从 根 到 每个节点的路径 长度 和 权值 乘积 之和 最小。 书上说的 静态最优 查找树的创建 时间 复杂度 较高,所以...

2015-04-20 14:59:04

阅读数:480

评论数:0

看数据结构写代码(53) 静态查找表(线性查找,二分查找,斐波那契查找,插值查找)

查找定义:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。 查找表分类:静态查找表和动态查找表。 静态查找表:只查找,而不进行插入,删除。 动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素。 ...

2015-04-20 10:53:40

阅读数:724

评论数:0

看数据结构写代码(52) 广义表的扩展线性链表存储表示

广义表 的另一种 存储结构是 扩展线性链表存储表示,这种 存储结构的 根 节点 必 存在,并且 根节点的 表尾 为空,将 根节点的 表尾 放 在 表头 的 表尾 指针上。 这样 从 表头 一直 就可以 遍历 所有 同级 节点。 具体j结构 如下: 例如 下面的 广义表 ,用 扩展线性...

2015-04-18 21:24:34

阅读数:833

评论数:0

看数据结构写代码(51) 广义表的头尾链式存储

广义表是一种非线性的数据结构。但如果广义表的每个元素都是原子,它就变成了线性表。广义表广泛地用于人工智能等领域的LISP语言。 广义表一般记作 LS = (a1, a2, ···, an), n是它的长度,ai可以是单个元素(原子),也可以是广义表(子表),当广义表非空时,称第一个元素a1为LS...

2015-04-18 16:18:35

阅读数:712

评论数:0

看数据结构写代码(50)伙伴系统

伙伴系统 是一种 只 可以 分配 2的 幂次方 个 空间的 ,回收 内存 时 只 合并 “伙伴空间” 的一种 动态内存管理方式。 例如 一个 空间 大小 为 64 的 内存,伙伴 系统 为 这 64 的内存  建立 一组 双向循环 链表,分别 管理着  2的 0 次方,2的1 次方幂,2的 2 ...

2015-04-16 21:08:06

阅读数:1043

评论数:0

看数据结构写代码(49)边界标识法

浅谈 内存:内存 两大问题:1. 如何 分配 内存 ? 2. 如何 回收 释放 的 内存 系统 从 可利用 空间表中  寻找 合适 大小的 内存 分配给用户,并 将 释放的 内存 重新 插入 可利用空间表里,以便 下次 继续 分配给用户。可是 怎么 分配 和 回收呢? 内存的分配与回收 有三种策略...

2015-04-15 21:44:02

阅读数:1475

评论数:0

看数据结构写代码(48) 弗洛伊德最短路径

迪杰斯特拉算法 适合 求 一个源点 到 其他 顶点的 最短路径问题,其时间 复杂度为O(n *n),n为 顶点数。  但是 若要求 任意顶点之间的最短路径问题,有两种方法:1,n次迪杰斯特拉算法 2. 弗洛伊德算法。 两种算法 时间复杂度 都为 O(n * n * n) 第二种算法 算法,只...

2015-04-14 22:47:39

阅读数:399

评论数:0

看数据结构写代码(47)迪杰斯特拉最短路径算法

这个算法的 思想 根 求 最小生成树算法 普里姆(Prim)算法 极其相似。迪杰斯算法 是求 一个顶点 到其他 顶点的 最短路径算法。 下面 上代码:(用的是 邻接矩阵 表示法) //迪杰斯特拉 最短路径。 //从 vex顶点 到其他 顶点的 最短路径 void shortestPath_Di...

2015-04-14 16:06:59

阅读数:700

评论数:0

看数据结构写代码(46) 关键路径

首先介绍下 概念问题: 与AOV网 相对应的 AOE网(Activity On Edge),边 表示 活动,顶点表示 事件,边的 权值表示 活动 所需的时间。AOE网 常用于求工程的 最短完成时间 以及哪些活动是影响工程进度的关键。 例如下图:   v1表示 工程的 开始事件,v9表示...

2015-04-14 10:30:46

阅读数:720

评论数:0

看数据结构写代码(45) 拓扑排序

用顶点表示活动,用弧 表示 活动 之间的优先关系的 有向图 称为 AOV网。 那么 怎么 合理 的 安排 活动的 先后顺序,以及 判断 活动 是否 不能完成(图中是否有环路),其实 就是 求 拓扑排序的问题。 例如 计算机专业的 课程 图,需要 安排 一个合理的 授课顺序。需要说明的是 拓扑排序...

2015-04-13 18:13:12

阅读数:388

评论数:0

看数据结构写代码(44) 判断无向图是否有环路

在 看 严蔚敏的 数据结构 一书 7.5小节时,书上 说“ 判断有向图是否存在环要不无向图复杂。对于无向图来说,深度优先遍历过程中遇到回边(即指向已访问过的顶点的边),则必定存在环路”。 看的不明白,所以 网上 百度了一下。 有了思路:故写下算法 和思路,以便以后 温故。 思路: 1.一个n个顶点...

2015-04-13 15:10:24

阅读数:673

评论数:0

看数据结构写代码(43) 关节点

首先 说明一下 概念问题: 关节点 :如果删除无向 图中的一个顶点,以及与顶点相关的边,把 图的 一个连通 分量 变成 两个 以上的 连通 分量。这样的顶点叫做关节点。 没有 关节点的 无向图,叫做 重连通图。重连通图中 任意 两个顶点 至少 存在 两条以上的 通路。 如果 删除 连通图上的...

2015-04-13 12:07:56

阅读数:507

评论数:0

看数据结构写代码(42)最小生成树

首先给出 一些 概念问题: 1.生成树: 一个n个顶点的 连通图 的 极小连通子图。 它含有n个顶点,但只有 n-1条边,不存在回路。 2.最小生成树:一个带权的 无向连通图,求出 各边权值相加  最小的 生成树,叫做最小生成树。 所以 求最小生成树  首先 要满足: 1. 首先 是 无向图 2....

2015-04-12 16:08:35

阅读数:397

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭