数据结构
文章平均质量分 71
thief thief
热爱计算机的小菜鸟,跟随大神们学点知识!
展开
-
对称矩阵的压缩存储
对称矩阵的压缩原创 2017-04-22 20:00:40 · 2454 阅读 · 0 评论 -
B-Tree、B+Tree、B*Tree
B树原创 2017-06-03 23:04:02 · 419 阅读 · 0 评论 -
红黑树
我们在前面的2票博文中已经写到简单介绍了搜索二叉树搜索二叉树,AVL树AVL树的创建,我们能该看到的是AVL树是一个搜索二叉树,其实,我们现在说的红黑树也是基于搜索二叉树和AVL树中的一些操作上来实现的,如果你对搜索二叉树有疑问,可以看看上面的两篇博文,如果,有错误,还望不吝赐教,如果你对搜索二叉树与AVL树不熟悉,红黑树理解起来就很难了(对我而言),总之,我觉得在看红黑树之前,搜索二叉树,AVL树原创 2017-05-25 11:56:10 · 698 阅读 · 0 评论 -
AVL树的创建
平衡二叉树下面是每个模块的代码,AVL树创建的完整版代码以上传GitHub AVLTree的创建;平衡二叉树(Balanced Binary Tree或Height-Balanced Tree)又称为AVL树。它或者是一颗空树,或者是具有下列性质的二叉树:1、它的左子树和右子树都是平衡二叉树;2、左子树和 右子树的深度之差的绝对值不超过1;若将二叉树上结点的**平衡因子**BF定义为该节点的右子原创 2017-05-22 22:21:33 · 6297 阅读 · 1 评论 -
搜索二叉树实现->迭代器实现->转化为双向链表
二叉搜索树原创 2017-05-21 22:11:52 · 828 阅读 · 0 评论 -
排序-->插入排序(直接插入排序&&希尔排序)
写在前面博客的全部代码以及测试用例全部已上传GitHub:直接插入排序&&希尔排序直接排序直接排序其实就是一次将无序空间向有序空间转换的过程,其实所有排序都是这样,只不过,在直接排序中,我们是将原本的数据内容分为了前后两个空间,前面的一个空间是有序的,而后面的空间无序,我要做的就是慢慢的将有序空间增长,将无序空间缩小,直到无序空间为0,我们就可以得到一个有序的数据链; 在上图中,我们大致可以观察出原创 2017-07-26 17:17:45 · 284 阅读 · 0 评论 -
交换排序(冒泡排序&&快速排序)
写在前面代码上传GitHub交换排序(冒泡&&快排)冒泡排序冒泡排序其实是非常简单,他就是把一个数与他的前一个数在比较与交换的过程;这个简单,我就直接上代码了: 版本一://最简单直接,但是效率不高void BulleSort(int* array, int size){ for(size_t i = 0; i < size; i++) { for(size_t原创 2017-07-26 20:42:53 · 559 阅读 · 0 评论 -
排序-->选择排序(选择排序&&堆排序)
选择排序选择排序:顾名思义,我们就可以猜到,它是原则合适的元素放到合适的位置; 从图中,我们可以得到: 1. 用第一个元素,和其他所有的元素进行比较,找出最小的,然后进行交换; 2. 然后进行,数据的递增; 3. 直到数据全部有序;void SelectSort(int* array, size_t size){ for(size_t i = 0; i < size; i++)原创 2017-07-26 18:19:43 · 302 阅读 · 0 评论 -
排序-->归并排序
归并排序归并排序也称外部排序,是内存中的数据过大一般不能处理的情况下,我们选择用外部排序来解决,归并排序也是一种分治的思想,其实它就是把所要排序的内存空间一直二分下去,直到不能再分,然后又进行合并的一种排序方法; 从上图中我们可以看到,其实归并排序也不是很难:void MergeSort(int* array, int size){ int* tmp = new int[size];原创 2017-08-04 19:22:58 · 407 阅读 · 0 评论 -
用先序遍历和中序遍历重建二叉树
重建二叉树原创 2017-05-06 14:54:36 · 462 阅读 · 0 评论 -
二叉树的线索化
线索化二叉树原创 2017-05-18 20:03:43 · 504 阅读 · 0 评论 -
稀疏矩阵的压缩存储与转置与加法
稀疏矩阵的压缩存储稀疏矩阵的转置稀疏矩阵的加法原创 2017-04-22 21:42:37 · 1916 阅读 · 1 评论 -
二叉树的非递归遍历
二叉树 先序,中序,后序非递归遍历原创 2017-05-06 14:17:23 · 595 阅读 · 0 评论 -
单链表实现约瑟夫环
单链表之约瑟夫环原创 2017-04-25 23:14:05 · 9343 阅读 · 2 评论 -
二叉树之创建与遍历
二叉树原创 2017-04-26 23:16:09 · 763 阅读 · 0 评论 -
单链表的相交问题
链表相交问题原创 2017-04-26 23:59:04 · 609 阅读 · 0 评论 -
堆的创建,插入,删除
堆的相关知识原创 2017-05-20 10:28:41 · 415 阅读 · 0 评论 -
哈夫曼树->哈夫曼编码
基本概念定义从A结点到B结点所经过的分支序列为从A结点到B结点的路径; 定义从A结点到B结点所进过的分支个数为从A结点到B结点的路径长度; 从二叉树的根结点到二叉树中所有结点的路径长度纸盒为该二叉树的路径长度; Huffman树:带权值路径长度最小的扩充二叉树应是权值大的外界点举例根结点最近的扩充二叉树,该树即为Huffman树;构建二叉树Huffman树的构造算法(哈夫曼算法): (1):原创 2017-05-20 13:00:11 · 420 阅读 · 0 评论 -
基于Huffman树的文件压缩
利用huffman编码的思想对文件进行压缩,主要原理是通过huffman编码来重新表示字符,使得出现频率高的字符编码短,出现少的字符编码长。整体下来的话,所需的总的bit位是减少的。但是要注意当大部分字符出现的频率都差不多时,huffman压缩的压缩效率会很低。 对于Huffman编码进行文件压缩,大致可以分为两个部分: 说明一下:文中知识每个模块的代码;完整版代码基于Huffman编码的文件压原创 2017-05-20 14:29:23 · 407 阅读 · 0 评论 -
计数与基数排序
计数排序计数排序是一种非比较排序,但是它很简单,主要有一下几个步骤:通过找到元素中最大最小值确定一个范围;建立一张这个范围大小的哈希表通过哈希的直接定值法找到对应元素进行操作写入对应的数组下表中就可以了void CountSort(int* array, size_t size){ assert(array); int max = array[0]; int mi原创 2017-08-04 20:21:16 · 555 阅读 · 0 评论