数据结构
文章平均质量分 57
zhuboke3344
这个作者很懒,什么都没留下…
展开
-
树的基本概念
树:由N(N>=0)个节点构成的集合。对N>1的树,有:1、有一个没有前驱的节点,根节点2、除了根节点,其余的节点被分为M(M>0)个互不相交的集合T1、T2······、Tm,其中每个集合Ti(1树是递归定义的。节点:节点包括一个数据元素及若干指向其他子树的分支节点的度:节点所拥有子树的个数叶节点(又称为终端节点):度为0 的节点分支节点:度不为0的节点,一个数中原创 2017-12-09 13:50:52 · 672 阅读 · 0 评论 -
排序——非比较排序
计数排序基本算法:遍历一遍数组,统计每个元素出现的次数并将其放入标记数组中,然后在遍历这个数组来还原数组。 基数排序73 22 93 55 14 28 65 39 81首先根据个位数的数值,在遍历数据时将它们分配到编号0至9的桶中(个位数值与桶号一一对应)0 1 81 ...原创 2018-08-06 18:17:57 · 257 阅读 · 0 评论 -
排序——归并排序
核心思想:将一组数据分成若干个组,即分到每组只有一个数据时就不用再分了。然后分别比较每两组数据元素的大小,将其合并成一组数据,再去和其他同等级别的组的数据元素进行比较、合并,且将合并后的数据放到到临时的空间中,然后在复制给原始空间,以此类推,直到最后合并完毕。1、递归算法 4 void MergeSort(int *arr,int left,int mid,int right,int ...原创 2018-08-06 16:45:33 · 135 阅读 · 0 评论 -
堆
一、堆的概念堆数据结构是一种数组对象,同时也是一棵完全二叉树堆得存储结构:(1)大堆:每个父节点的关键码都大于孩子节点(2)小堆:每个父节点的关键码都小于孩子节点二、堆的创建建立大堆分为两步:(1)将数据放入堆中 for (size_t i = 0; i < n; i++) { _a.push_back(a[i]); }for (size_t...原创 2018-08-04 12:19:46 · 213 阅读 · 0 评论 -
排序——交换排序
交换排序:利用交换位置进行排序冒泡排序1、算法思想重复的走访要排序的元素,依次比较相邻两个元素的大小,如果顺序错误则交换这两个元素的位置,直到不需要在比较2、步骤比较相邻两个元素,如果前一个比后一个大,则交换位置 从第一个元素一直比较到最后一个元素,这时最后一个元素的值是最大的 减掉最后一个元素,重复上述步骤 每次比较的元素个数逐渐减少,直到没有要比较的元素程序代码...原创 2018-08-06 14:56:13 · 331 阅读 · 0 评论 -
算法的时间复杂度
时间复杂度时间复杂度实际就是一个函数(这里指的是数学里的函数),该函数计算的是执行基本操作的次数。为什么时间复杂度不是计算执行的实践而是次数?答:因为我们无法计算执行的时间,比如不同的机器不同的配置,同一个算法的运行时间都是不一样的。所以我们只能在这里执行的次数来表示算法的性能。void test(int n){ int count = 0; for (int i = 0;...原创 2018-04-05 18:20:17 · 627 阅读 · 0 评论 -
排序——选择排序
基本思想每一趟(第i趟,i=1,2,...,n-2)在后面n-i个待排序的数据元素集合中选出关键码最小的数据,作为有序元素序列的第i个元素。待到第n-2趟做完,待排序元素中只剩下1个元素,排序结束。直接选择排序操作步骤:1)在元素集合array[i]——array[n-1]中选择关键码最小的数据元素2)若它不是这组元素中的第一个元素,则将它与这组元素中的第一个元素交换3)在...原创 2018-01-06 16:06:18 · 187 阅读 · 0 评论 -
排序——插入排序
基本思想每一步将一个待排序的元素,按其排序码的大小,插入到前面已经排好序的一组元素的合适位置上去,直到元素全部插完为止。直接插入排序基本思想:当插入第i(i>=1)个元素时,前面的array[0],array[1],···,array[i - 1]已经排好序,此时用array[i]的排序码与array[i - 1],array[i - 2],···的排序码顺序进行比较,找到插入位...原创 2017-12-30 12:26:07 · 156 阅读 · 0 评论 -
排序——概念
一、概念排序:就是将一组杂乱无章的数据按照一定的规律(升序或降序)组织起来。数据表:待排序数据元素的有限集合。排序码:通常数据元素有多个属性域,其中有一个属性域可用来区分元素,作为排序依据,该域即为排序码。主排序码:如果在数据表中各个元素的排序码互不相同,这种排序码称为主排序码。按照主排序码进行排序,排序的结果是唯一的。按照次排序码进行排序,排序的结果可能是不唯一的。二...原创 2017-12-30 10:43:55 · 341 阅读 · 0 评论 -
矩阵
对称矩阵对称矩阵A:N*N,A(i,j)=A(j,i)(0<=i<=N&&0<=j<=N)压缩存储:只存储对称矩阵的上三角或下三角的数据,所以最多存储N*(N+1)/2个数据对称矩阵和压缩存储的对应关系:SymmetricMatrix[i][j]=array[i*(i+1)/2+j]还原矩阵:首先判断指定位置的元素是上三角还是下三角的坐标,如...原创 2017-11-25 19:48:47 · 291 阅读 · 0 评论 -
栈及栈的应用(括号匹配和逆波兰表达式)
栈的概念:一种特殊的线性表,其只允许在固定的一端(末端)进行插入和删除元素的操作。栈顶:进行数据插入和删除的一端。栈底:栈顶的另一端。空栈:不含任何元素的栈。栈的性质:先进后出栈的功能:从某种数据元素序列到另一种数据元素序列的改变。栈的实现:静态//静态栈template<class T, size_t N = 100>class Stack{public: void Pus...原创 2017-12-06 23:42:39 · 363 阅读 · 0 评论 -
二叉树的遍历
1、前序遍历(1)递归非递归2、中序遍历3、后序遍历原创 2017-12-09 16:42:12 · 154 阅读 · 0 评论 -
二叉树
二叉树的基本概念一、二叉树的概念:一棵二叉树是节点的一个有限集合,该集合或者为空,或者由一个根节点加上两棵左子树和右子树组成二、二叉树的特点:1、每个节点最多有两棵子树,即二叉树不存在度大于2的节点2、二叉树的子树有左右之分,其子树的次序不能颠倒三、二叉树的形式:四、满二叉树:在一棵二叉树中,所有分支节点都存在左子树和右子树,并且所有的叶节点都在同一层上五、完全...原创 2017-12-09 16:20:04 · 29281 阅读 · 6 评论 -
文件压缩
HuffmanTree概念Huffman的定义:假设给定一个有n个权值的集合{w1,w2,w3,…,wn},其中wi>0(1<=i<=n)。若T是一棵有n个 叶结点的二叉树,而且将权值w1,w2,w3…wn分别赋值给T的n个叶结点,则称T是权值为 w1,w2,w3…wn的扩充二叉树。带有权值的叶节点叫着扩充二叉树的外结点,其余不带权值 的分支结点叫做内结点。外结点的带权路...原创 2018-08-21 15:37:08 · 379 阅读 · 0 评论