自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 资源 (1)
  • 收藏
  • 关注

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

前面说的 各种查找都是 基于 “比较” 的基础 来进行 查找的。查找的 效率 要 看 比较的 次数。那么 有没有 不需要 比较,就可以 找到 想要的数据的 方法呢?哈希表 就是 这样的 一种方法,它用  数组 作为 保存 关键字的 数据原型,通过 一个 哈希 函数f(k),来找到 关键字 存储的位置,从而 找到想要的信息。例如 我们 想要解决 这样的一个问题:假设这有一个各种字母组成的

2015-04-30 10:14:46 616

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

trie树,是用 树的 多重链表来表示 树的。每个节点 有 d 个指针域。若从键树中的某个节点到叶子节点的路径上每个节点都只有一个孩子,则可以把 路径上的所有节点压缩成一个叶子节点,且在叶子节点中 存储 关键字 以及 根关键字相关的信息。当节点的度 比较大时,选择 Trie树,要比 双链表树更为合适。tire树的 数据 压缩 是 挺与众不同的。下面 给出 具体的 代码:源代码工程文

2015-04-29 12:35:06 2661

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

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

2015-04-28 21:59:51 1129

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

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

2015-04-24 12:16:55 867

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

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

2015-04-22 11:46:08 845

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

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

2015-04-21 14:28:42 821

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

二叉排序树 是一种 动态 查找树,它的 创建 是在 查找中 生成的。 当 查找 失败时,它将 数 插入到 合适的 位置中去。 二叉查找树的 左子树上的值 父亲的 值 小,而 右子树上的值 总是 比 父节点 大。这样 查找 类似与 二分 查找,其 最多 查找 的 次数 等于 树的 深度。下面的代码 主要 是 两方面:插入 节点 和 删除 节点。下面 给出 代码, 欢迎 指出 代码 不

2015-04-20 20:44:56 755

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

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

2015-04-20 14:59:04 683

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

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

2015-04-20 10:53:40 1081

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

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

2015-04-18 21:24:34 2063

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

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

2015-04-18 16:18:35 1722

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

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

2015-04-16 21:08:06 2184

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

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

2015-04-15 21:44:02 3610

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

迪杰斯特拉算法 适合 求 一个源点 到 其他 顶点的 最短路径问题,其时间 复杂度为O(n *n),n为 顶点数。 但是 若要求 任意顶点之间的最短路径问题,有两种方法:1,n次迪杰斯特拉算法 2. 弗洛伊德算法。两种算法 时间复杂度 都为 O(n * n * n)第二种算法 算法,只用 3重循环,算法及其 简洁。下面给出代码:完整代码工程文件网盘地址:点击打开链接//弗洛

2015-04-14 22:47:39 545

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

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

2015-04-14 16:06:59 1046

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

首先介绍下 概念问题:与AOV网 相对应的 AOE网(Activity On Edge),边 表示 活动,顶点表示 事件,边的 权值表示 活动 所需的时间。AOE网 常用于求工程的 最短完成时间 以及哪些活动是影响工程进度的关键。例如下图: v1表示 工程的 开始事件,v9表示工程的结束事件。我们将v1(入度为0)叫做源点,v9(出度为0)叫做汇点。AOE网中只有一个源点,一个

2015-04-14 10:30:46 1000

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

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

2015-04-13 18:13:12 584

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

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

2015-04-13 15:10:24 1725

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

首先 说明一下 概念问题:关节点 :如果删除无向 图中的一个顶点,以及与顶点相关的边,把 图的 一个连通 分量 变成 两个 以上的 连通 分量。这样的顶点叫做关节点。没有 关节点的 无向图,叫做 重连通图。重连通图中 任意 两个顶点 至少 存在 两条以上的 通路。如果 删除 连通图上的 k个 节点,才能 破坏 他的连通性,那么 这个连通图的 连通度 为k。下面的算法 是 求 连通图

2015-04-13 12:07:56 1062

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

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

2015-04-12 16:08:35 631

原创 看数据结构写代码(41) 强连通分量

首先介绍概念问题,在有向图中,若 顶点v1 到 v2 存成路径,并且 v2 到 v1 存成 路径,则称 顶点 v1 和 v2 是强连通的。若 有向图 任意两个节点 都是 强连通的,则 称为强连通图。非强连通图的 极大强连通子图,为 强连通分量。特别说明,连通的概念 属于 无向图,强连通 属于 有向图。例如:无向图:连通图,连通分量,生成树; 有向图:强连通图,强连通分量。数据结构书上 简单

2015-04-12 12:10:09 1394 1

原创 看数据结构写代码(40) 无向图的深度优先生成树与广度优先生成树

图的深度优先遍历 和 广度 优先 遍历 算法中的 每一次 最外层 循环 都 产生 一个 无向图 的 连通分量,每一个连通分量,都可以产生一个生成树,将这些生成树合在 一起 就是 一个 森林。 用 树的 孩子 兄弟 链表 表示法 来 表示 这个 森林, 就是 这一节 算法的  内容。深度优先森林 代码 ://深度优先生成森林void dfsTree(AMLGraph g,int i,Tre

2015-04-11 23:50:57 7797 2

原创 看数据结构写代码(39) 图的遍历(深搜和广搜)

图的遍历算法 有两种 :深度优先搜索遍历 和 广度 优先搜索遍历。深度优先搜索遍历类似与 树的 先序遍历。广度优先搜索遍历类似与树的层序遍历。只不过 图 可以有 不连通的 节点,所以 得 遍历 整个顶点数组。深搜遍历 总是 先访问当前节点的邻接点,而 广搜算法 是 先访问顶点的邻接点 要 先于 后访问顶点的邻接点 被 访问。具体遍历顺序如下:以下代码 以 图的 邻接多重

2015-04-10 10:49:22 1208 1

原创 看数据结构写代码(38) 图的邻接多重表表示法与实现

图的邻接多重表 是 无向图的 另一种表示法。其与 邻接表 的差别 仅仅 在于 ,邻接表 用 两个 顶点 来表示 一条边,而 邻接多重表 用一个 顶点来表示一条边。这样使得 邻接多重表 在 某些操作 要 来的 方便。例如 将 搜索过的边 做记号 或者 删除 一条边。下面是邻接多重表的结构:下面的 6条边 用 6个弧 节点表示,用12个指针指向,每个弧节点被 指向2次。这样使得我们 在 释放内

2015-04-09 22:59:47 2974 4

原创 看数据结构写代码(37) 图的十字链表的表示与实现

图的邻接表在 查找 有向图的 出度 很 方便,但是 在 查找 入度 时,需要遍历整个图。如果想要 方便的 查找 入度,需要 建立 逆邻接表。十字链表 正好 就是 邻接表 和 逆邻接表的集合。具体结构图如下:感觉 十字链表 在 查找 入度时 方便 一些,其他 跟 邻接表没什么区别。代码如下:// CrossLinkGraph.cpp : 定义控制台应用程序的入口点。//有向图的

2015-04-09 16:07:04 1834

原创 看数据结构写代码(36) 图的邻接表表示与实现

图的邻接表表示法,是为每一个顶点建立一个链表,链表里存放着相同弧尾的 弧的信息,这些链表顺序存放在数组中。下面是无向图g2的邻接表 邻接表 比 邻接矩阵 节省空间,同时 也带来一些操作上的 不便,例如 看 两个顶点是否 相邻,需要 遍历 链表,在 求 无向图顶点的度时,只需 遍历 顶点的链表,而 求 有向图 顶点的度 需要 遍历 整个图 查找 弧头 为这个顶点的 个数。 如果 不想这样

2015-04-09 11:08:52 1374

原创 看数据结构写代码(35) 图的邻接矩阵表示法

杂谈:最近清明小长假,好好的放松了一下。节前 和 节后 都有点 松懈。不好,不好。贵在坚持。加油。图的邻接矩阵表示法是用 两个数组 来表示 图的数据结构。一个是顶点数组,另一个是邻接矩阵数组。邻接矩阵 里存放着 顶点的关系。用邻接矩阵表示图,在 看 顶点之间 是否有边,或者 求顶点的度等操作时比较简单。但空间浪费巨大,在插入,删除 顶点 和边 操作时 需要 移动大量数据,造成不便。所以在插

2015-04-08 12:54:39 1654 1

原创 看数据结构写代码(34) 树与回溯法(二)排序树(8皇后问题)

套用回溯 公式程序:void backtrack (int t){ if (t > n) { // 到达叶子结点,将结果输出 output (x); } else { // 遍历结点t的所有子结点 for (int i = f(n,t); i <= g(n,t); i ++ ) {

2015-04-01 16:25:21 1146

原创 看数据结构写代码(33) 树与回溯法(一) 子集树

回溯法 是 一种 在 穷举 中,裁剪 不满足 条件 的 分支,已达到 提高 效率的 方法。其基本原型 是 树的 先序遍历,从 树根 到 树叶的路径 是 问题的 一个 解。 回溯法的基本框架 =  确定 解空间 + 深度优先遍历 + 裁剪函数 + 确定结果函数其中 解空间,分为 子集树 和 排序树。具体 概念 详解:参考 点击打开链接  和 点击打开链接递归算法通用 模板如下:

2015-04-01 13:31:41 1059

数据结构源代码 严蔚敏版本的

严蔚敏数据结构 书上的源代码 都有!MSDN只能传一个文件,蛋疼的很!!!!!!!!!!!!!!!!!!!!!

2011-03-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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