数据结构(类C语言版)
随笔
Howdu
这个作者很懒,什么都没留下…
展开
-
快速排序算法实例
例:对关键码序列(66,13,51,76,81,26,57,69,23)进行快速排序。求第一趟划分后的结果。关键码序列递增。以第一个元素为划分基准。【主要方法步骤】如下:将两个指针i,j分别指向表的起始和最后的位置。反复操作以下两步:(1)j逐渐减小,并逐次比较j指向的元素和目标元素的大小,若p(j)<T则交换位置。(2)i逐渐增大,并逐次比较i指向的元素和目标元素的大小,若p(i)>T则交换位置。直到i,j指向同一个值,循环结束。步骤一:首先设置两个变量i,j。分别指向原创 2020-07-09 23:21:56 · 9262 阅读 · 0 评论 -
hash冲突及解决方法(平均查找长度)
一、什么是hash冲突?假设hash表的大小为9(即有9个槽),现在要把一串数据存到表里:5,28,19,15,20,33,12,17,10简单计算一下:hash(5)=5, 所以数据5应该放在hash表的第5个槽里;hash(28)=1,所以数据28应该放在hash表的第1个槽里;hash(19)=1,也就是说,数据19也应该放在hash表的第1个槽里——于是就造成了碰撞(也称为冲突,collision)。二、Hash冲突解决方法:1.开放定址法(再散列法):基本思想:当关键字key的哈希地址p转载 2020-07-09 11:59:53 · 10669 阅读 · 2 评论 -
有向无环图表示算术表达式
题目描述:用有向无环图描述表达式(A+B)*((A+B)/A),至少需要顶点的数目为几个?分析:先画出算术表达式 (A+B)*((A+B)/A)的二叉树表示(A+B)*((A+B)/A) 有重复的子表达式 (A+B),二叉树中可实现对子表达式的共享所以:相同的叶子节点可以共用:所以至少需要五个顶点: *,+, /, A,B 各一个。...转载 2020-07-09 10:56:33 · 4150 阅读 · 1 评论 -
平衡二叉树(AVL树)
性质:它或者是颗空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。若将二叉树节点的平衡因子BF定义为该节点的左子树的深度减去它的右子树的深度,则平衡二叉树上所有节点的平衡因子只可能为-1,0,1.只要二叉树上有一个节点的平衡因子的绝对值大于1,那么这颗平衡二叉树就失去了平衡。根据上述性质我们可以发现图(a)是一棵平衡二叉树,而图(b)是一棵不平衡二叉树。图中结点的数值代表的就是当前结点的平衡因子。也验证了上述性质,一棵平衡二叉树的所转载 2020-07-09 09:05:17 · 405 阅读 · 0 评论 -
哈夫曼编码
哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。哈夫曼编码,主要目的是根据使用频率来最大化节省字符(编码)的存储空间。简易的理解就是,假如我有A,B,C,D,E五个字符,出现的频率(即权值)分别为5,4,3,2,1,那么我们第一步先取两个最小权值作为左右子树构造一个新树,转载 2020-07-09 08:15:05 · 1103 阅读 · 0 评论 -
非二叉树(普通树)与森林的遍历
转载 2020-07-08 23:25:37 · 286 阅读 · 0 评论 -
树的遍历方式
这是数据结构当中对结bai点进行访问遍历分先序、中序、后序先序:先访问根结点、左结点、右结点中序:先访问左结点、根结点、右结点后序:先访问左结点、右结点、根结点先序:ABC中序:BAC后序:BCA...转载 2020-07-08 23:15:38 · 120 阅读 · 0 评论 -
如何将一棵树转化成二叉树
要点:从这棵树的根结点开始,从上到下,看每一个结点,把你正在看的结点的孩子放在左子树,兄弟放在右子树。口诀:将 节点的孩子 放在左子树;将 节点的兄弟 放在右子树。关于这个问题,最好的办法就是记住一道例题了,因为语言不是很好描述,也不容易看懂描述。例题:或者有另一种理解方法:步骤:在所有兄弟结点之间加一连线对每个结点,除了保留与其长子的连线外,去掉该结点与其它孩子的连线。如下图所示:...转载 2020-07-08 23:08:03 · 1115 阅读 · 0 评论 -
指针详解
转载 2020-05-02 23:59:14 · 131 阅读 · 0 评论 -
引用:&(reference)与间接引用:*(dereference)
#include <iostream>using namespace std;int addition (int a, int b){ int r; r=a+b; return r;}int main (){ int x=5, y=3, z; z = addition (x,y); cout << "The result is...转载 2020-05-02 23:29:06 · 962 阅读 · 0 评论