2017年5月8日

数据结构--左式堆的思想和代码

摘要: 左式堆也是实现优先列队的一种数据结构,和二叉堆一样,左式堆也具有堆序性和结构性。 堆序性: 一个节点的后裔都大于等于这个节点。 结构性:左式堆也是二叉树,和二叉堆的唯一区别在于左式堆不是理想平衡的,实际上是趋于非常不平衡,对于堆中每一个节点X,左儿子的零路径长至少与右儿子的零路径长一样大,零路径长N 阅读全文

posted @ 2017-05-08 21:32 wu_xin 阅读(211) 评论(0) 推荐(0) 编辑

2017年5月6日

数据结构--优先列队(堆)的实现与相关操作

摘要: 实现优先列队的最普遍的工具是二叉堆,有时也只叫做堆。 二叉堆有两个性质:结构性和堆序性。 结构性:堆是一颗被完全填满的二叉树,底层除外,底层元素从左到右依次填入,对于一个完全二叉树,用一个数组来表示一棵树,发现对于数组的任意位置i的元素,他的左儿子在2i处,右儿子在2i+1出,父亲在i/2向下取整处 阅读全文

posted @ 2017-05-06 19:31 wu_xin 阅读(267) 评论(0) 推荐(0) 编辑

数据结构--开放定址法解决散列冲突时几种探测法的比较

摘要: 开放定址法解决散列冲突时主要有线性探测法,平方探测法和双散列法,以下代码通过插入大量随机数,来统计几种探测法产生冲突的次数。 通过改变随机数组的大小,可以多次观察结果,发现每次都是双散列产生的冲突次数最少,但是也少不了多少。 夜深了,,, 好像是陷入死循环,希望后面的代码有个break。 阅读全文

posted @ 2017-05-06 12:36 wu_xin 阅读(342) 评论(0) 推荐(0) 编辑

2017年5月5日

数据结构--散列(使用开放定址法解决冲突)

摘要: 前一篇博客中提到解决散列冲突的方法为分离链接法,它的装填因子为1,每次插入一个元素就申请一个空间,但是,开放定址不一样, 所谓的开放定址就是散列一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入,具体寻找空地址的方法有线性探测法,平方探测法,双散列等等, 阅读全文

posted @ 2017-05-05 21:56 wu_xin 阅读(902) 评论(0) 推荐(0) 编辑

2017年5月4日

数据结构--散列(分离链接法解决冲突)

摘要: 散列方法的主要思想是根据结点的关键码值来确定其存储地址:以关键码值K为自变量,通过一定的函数关系h(K)(称为散列函数),计算出对应的函数值来,把这个值解释为结点的存储地址,将结点存入到此存储单元中。检索时,用同样的方法计算地址,然后到相应的 单元里去取要找的结点。通过散列方法可以对结点进行快速检索 阅读全文

posted @ 2017-05-04 20:23 wu_xin 阅读(322) 评论(0) 推荐(0) 编辑

2017年5月3日

数据结构--Avl树的创建,插入的递归版本和非递归版本,删除等操作

摘要: AVL树本质上还是一棵二叉搜索树,它的特点是: 1.本身首先是一棵二叉搜索树。 2.带有平衡条件:每个结点的左右子树的高度之差的绝对值最多为1(空树的高度为-1)。 也就是说,AVL树,本质上是带了平衡功能的二叉查找树(二叉排序树,二叉搜索树)。 对Avl树进行相关的操作最重要的是要保持Avl树的平 阅读全文

posted @ 2017-05-03 21:08 wu_xin 阅读(1052) 评论(0) 推荐(0) 编辑

2017年4月22日

有向有权图的最短路径算法--Dijkstra算法

摘要: Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法, 在很多专业课程中都作为基本内容有详细的介绍,如数据结构 阅读全文

posted @ 2017-04-22 16:23 wu_xin 阅读(3811) 评论(0) 推荐(0) 编辑

有向无权图的最短路径算法

摘要: 对于一个有向无权的图,我们只需从起点开始,依次往后寻找即可,这还谈不上算法,只能说是一种思想,这种思想解释如下: 首先对于一个有向无权的图: 我们令v0为起点,v0到v0的路径为0,所有在v0下面标0,如下图所示: 接着发现v0到v1和v2,v3都只需经过一条边,因此在v1和v2,v3下面标1,如下 阅读全文

posted @ 2017-04-22 15:58 wu_xin 阅读(502) 评论(0) 推荐(0) 编辑

2017年4月20日

图的邻接表表示与无环图的拓扑排序

摘要: 一、 图的最常用的表示方法是邻接矩阵和邻接表。 1,邻接矩阵 邻接矩阵其实就是一个二维数组,对于每条边<u,v>,我们就令A[u][v] = 1,如果图为有权图,我们也可以令A[u][v]等于该权,这么表示的优点是非常简单,但是它的空间需求很大,如果图是稠密的,邻接矩阵是合适的表示方法,如果图是稀疏 阅读全文

posted @ 2017-04-20 21:32 wu_xin 阅读(1339) 评论(0) 推荐(0) 编辑

2017年4月18日

栈的一个应用--求后缀表达式的值

摘要: 后缀表达式就是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则),如:(2 + 1) * 3 , 即2 1 + 3 * = 3 3* = 9,计算后缀表达式的值最好的办法就是用堆栈,实现代码如下: 运算结果如下: 此代码仅支持个位数的 阅读全文

posted @ 2017-04-18 21:51 wu_xin 阅读(331) 评论(0) 推荐(0) 编辑

导航