
数据结构
doctor_xiong
喜欢天空一般的简约白!
展开
-
【Linux】基础IO(上)!!!
回忆C语言IO: 在C语言里面,对文件的操作主要是通过fopen()和fclose()函数进行的, FILE* fopen(char*filename,char*type); 其中type表示的是需要对文件的操作类型。 int fclose(char*filename);在C语言里面对文件进行IO操作的时候C语言会默认打开三个输入输出流,分别是stdin,stdout,stderr,原创 2018-01-14 23:05:59 · 551 阅读 · 0 评论 -
【数据结构】并查集!!
在M个人里面包含有N个朋友关系R,如果朋友的朋友也属于同一个朋友圈,那么设计程序计算共有多少个朋友圈?思路:使用并查集,开始时候将M个元素的数组初始化成-1,当加入元素的时候,如果元素的位置上面的数据不是负数,那么就将该数据作为下标继续寻找下标为负数的位置,如果找到了下标为负数的位置就将需要关联的数据的数据加到寻找到的位置上面。 如图,将具有直接朋友关系的看成一棵树,那么并查集里面的负数...原创 2018-04-12 12:22:59 · 284 阅读 · 0 评论 -
【数据结构】hash算法!!!
Hash表是一种可以将查找元素的时间复杂度降为O(1)的高效算法。 基本原理:将所有的数据通过hash函数映射到hash表里面,如果需要查找元素的时候再通过hash函数来计算出来元素在hash表里面的位置,从而一次将需要的元素找到。 存在的问题 如果有两个或者更多的元素通过hash函数映射的hash位置是相同的那么就会出现问题。 解决办法 线性探测: 在产生hash冲突的时候,...原创 2018-03-30 21:48:03 · 486 阅读 · 0 评论 -
【数据结构】二叉搜索树!!!
二叉搜索树的结构类似于二分查找的思想,在二叉树结构里面,将数据的大小分为树的左右子树,从而在搜索的时候类似于二叉搜索。 如图: 当搜索一个二叉搜索树的时候时间复杂度就是O(logN). 构建搜索二叉树:BSTree(int *arr,size_t size) :_root(NULL) { int index = 0; ...原创 2018-03-08 12:10:37 · 274 阅读 · 0 评论 -
【数据结构】实现红黑树!!!
相对于AVL树来说,红黑树去掉了AVL树里面的平衡因子,利用树节点的颜色来调整数的平衡。 红黑树的创建原则:每个节点的颜色不是黑色就是红色树的根节点是黑色的如果一个节点的颜色是红色的,那么它的里两个孩子结点颜色是黑色的(即,没有两个连续的红色结点)对于每个节点,在其后面的简单路径上面的黑色结点的个数是相同的每个叶子节点都是黑色的(叶子节点是指空节点)注:当满足上面的颜色限...原创 2018-02-27 13:33:38 · 221 阅读 · 0 评论 -
【数据结构】归并排序!!!
归并排序 整体思想:将数据分成很多的部分,每次排序数据的一部分,然后将两部分的数据进行整体排序,这样一步一步将整体数据排序。 如图: 注:将需要排序的数据进行分块,当每个块的数据足够的少的时候就可以进行效率高的排序方法,当两块数据排序好的时候就可以将两块排序好的数据进行合并。 具体实现方法:#ifndef _MERGESORT_H#define _MERGESORT_H#原创 2018-02-05 21:24:58 · 276 阅读 · 0 评论 -
【数据结构】AVL树!!!
在二叉搜索树来查询数据的结构里面,树形结构并不是一个平衡的二叉树。在有些情况下效率明显不是很高(例如,左单支或者右单支)。 在AVL树里面,每个子树的高度相差不大于1,即最高的子树和最低的子树之间相差最高为1。 例如:这里规定是右子树的高度-左子树的高度作为平衡因子。 当在整个树里面的结点的平衡因子含有绝对值大于1的时候就需要对树进行调整。 情况1: 情况2: 情况3:原创 2018-01-27 22:13:20 · 370 阅读 · 0 评论 -
【数据结构】快排!!!
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。该方法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。方法一:注:在数组的左右两原创 2018-01-08 17:44:23 · 1338 阅读 · 0 评论 -
【数据结构】矩阵!!
* 稀疏矩阵的存储和还原在数据结构里面矩阵的存贮方式并不是全部是吧数据一个一个存储起来,但是这是针对一些特殊的矩阵。* 举个栗子: 比如这个矩阵在内存里面如果是把全部的数据全部存储在内存里面,这样显然是很浪费内存的。对于这类的矩阵除去一些非0数据,那么留下来的就是在这个矩阵里面的有效数据,只要把这些有效数据进行存储就可以实现对真个矩阵的存储。 如果要存储矩阵的有效数据,那么在存储的原创 2017-11-25 17:09:05 · 2375 阅读 · 0 评论 -
【数据结构】堆的创建以及其他操作!!!
堆的概念:堆是一组将 元素按照完全二叉树的形式存储在一个人以为数组里面并且在这个完全二叉树里面满足父节点和子节点的关系为Ki <= K2*i+1 且 Ki<= K2*i+2(Ki >= K2*i+1 且 Ki >= K2*i+2) i = 0,1,2…, 的一种数据结构。 分类: 小堆大堆 大堆的小堆的创建 创建堆: 在创建堆原创 2017-12-22 17:05:35 · 1065 阅读 · 0 评论 -
【数据结构】二叉树的线索化!!
二叉树的缺点:在二叉树的数据结构里面,如果是利用递归的方式创建的,那么就存在栈溢出的缺陷,如果采用循环的方式创建的话,那么就存在着空间复杂度过高的缺点。同时在二叉树里面如果含有N个结点的话,那么没有使用的结点指针就含有(N+1)个,那么就造成大量的结点指针浪费。解决方法如果在创建二叉树的时候将这些没有使用的结点指针用来存储这些结点的前驱和后继结点 ,那么在遍历的时候就会更加的方便。前序线索化:原创 2017-12-07 23:44:04 · 414 阅读 · 0 评论 -
【数据结构】二叉树!!!
概念: 一颗二叉树是结点的一个有限集合,该集合为空或者是由一个根节点和一个左子树和一个右子树构成的组合。特点: 每个结点最多有两个子树,每个子树的顺序不能变,份左子树和右子树。分类: 满二叉树:在一棵树里面每个分支结点都存在左子树和右子树,并且所有的叶子节点都在同一层。 完全二叉树:一棵具有N个结点的二叉树的结构和满二叉树的前N个结点相 二叉树的性质 若二叉树根结点的层数原创 2017-11-30 19:37:45 · 343 阅读 · 0 评论 -
【数据结构】堆排序和模拟实现优先级队列!!
在很多的时候队列的输出不一定是先进先出的原则,同时也存在优先级队列。> 在模拟实现的时候就可以根据这个优先级的不同来创建这个队列,即根据这个优先级数组来创建一个堆,那么在输出这个堆的时候就可以实现根据优先级的不同来创建不同优先级的队列代码:template<class T>class Priority{public: Priority() {} Priority(T*原创 2017-12-22 17:32:02 · 332 阅读 · 0 评论 -
【数据结构】希尔排序!!!
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 希尔排序是将一组数据进行分组,再将分组的数据进行排序,这样数据就会逐渐的趋向有序,当分组的个数为1的时候将整个数组排序一遍,那么整个数组就排序好了。 基本思想:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”原创 2018-01-05 23:04:02 · 408 阅读 · 0 评论 -
【数据结构】选择排序!!!
在选择排序里面,是将数组里面的数据进行遍历一遍,找到最大的元素,记录下最大元素的下标,对最大放在合适的位置。 如图: 实现代码:void selectionSort(int[] list) { // 需要遍历获得最小值的次数 // 要注意一点,当要排序 N 个数,已经经过 N-1 次遍历后,已经是有序数列 for (int i = 0; i list.len原创 2018-01-05 23:28:05 · 293 阅读 · 0 评论 -
【数据结构】mgraph!!
概念:图是由定点集合和定点间关系组成的数据结构。 有向图:在有向图里面的\A,C和C,A是不同的两个边,即在图里面的边是有方向的。 无向图:在无向图里面的A,C和C,A是相同的一条边,即在无向图里面的边是没有方向之分的。 定点的度:定点的度是指与定点相关的边的个数。重点邻接矩阵方式存储图邻接链表方式存储图邻接矩阵 无向图: 有向图: 代码实现:template<class V,原创 2018-04-21 13:34:31 · 5534 阅读 · 0 评论