数据结构
文章平均质量分 83
Y-ANG
这个作者很懒,什么都没留下…
展开
-
栈的模拟实现
栈的模拟实现原创 2016-09-12 08:36:19 · 1044 阅读 · 0 评论 -
平衡搜索树---AVL树
AVL树是一种高度平衡的二叉搜索树,它的每个结点都有一个平衡因子,这个平衡因子的取值是-1,0,1(平衡因子 = 右子树高度 - 左子树高度)AVL树具有的性质:1.左子树和右子树的高度差不超过1;2.树中的各子树都是AVL树一、AVL树结点的定义为了判断每个子树是否平衡,因此在定义AVL树的结点的时候就应该在搜索二叉树的基础上加一个平衡因子_bftemplatestru原创 2016-10-30 10:50:23 · 1444 阅读 · 0 评论 -
二叉搜索树
二叉搜索树的操作:插入,删除,查找,遍历二叉搜索树也称有序搜索树,它具有如下的性质:1.每个结点都有一个作为搜索依据的关键码(key),每个结点的关键码都不一样2.左子树上所有结点的关键码都小于当前根节点的关键码3.右子树上所有结点的关键码都大于当前根节点的关键吗4.左右子树都是二叉搜索树二叉树的操作:插入,删除,查找,遍历一、插入---Insert当进行插入后,不能破坏二叉搜索树的结构,因此原创 2016-10-26 21:54:15 · 804 阅读 · 0 评论 -
堆排序算法
堆排序算法:根据堆具有的性质,我们可以每次将堆顶的数字(也就是最大或者最小的数字)与对数组尾部的数字交换,然后将堆从树的根部开始向下调整,到已经交换的数字的前一个位置截至,那么这样交换以后后边的数字就是有序的了!void HeapSort(int* a,size_t size){ //建堆 for (int i=(size-1)/2; i>=0; --i) { _AdjustD原创 2016-10-14 18:08:32 · 598 阅读 · 0 评论 -
堆&优先级队列
本文要点:1.堆的实现3.利用堆实现优先级队列一、堆1.堆是一种数组对象,可以被看作一颗完全二叉树结构,堆结构的二叉树存储是一种静态存储。堆又被分为大堆和小堆:大堆:每个父节点大于子节点小堆:每个父节点小于子节点2.堆的实现(以大堆为例)实现一个堆主要在于要建堆和调整。假设现有数组int a[] = { 10, 16, 18, 12, 11, 13,原创 2016-10-14 18:04:57 · 569 阅读 · 0 评论 -
二叉树(二):三种遍历的非递归实现
本文要点:二叉树三种遍历方式(前序、中序、后序)的非递归实现ps:递归实现的链接:二叉树的递归实现原创 2016-09-28 10:12:22 · 2958 阅读 · 1 评论 -
二叉树(一):二叉树的创建以及三种遍历方法的递归实现
我们都知道现实生活中的树长什么样,那么,很明显,二叉树就是一棵“树”,不过它是一个存储数据的一种结构,根在上,向下生长。当然,这样的存储结构只是其中的一种。在这里,就要引出二叉树的存储和二叉树的遍历了!树:n(n>=0)个结点的有限集合,n=0时为空树。二叉树的三种遍历方式原创 2016-09-27 22:07:28 · 12151 阅读 · 1 评论 -
广义表的实现(c++实现)
本文要点:1.广义表的存储结构2.广义表的简单实现,包括:构造、拷贝构造、赋值运算符重载、广义表的大小Size、深度Depth以及输出函数原创 2016-09-26 09:04:12 · 6651 阅读 · 0 评论 -
对称矩阵的存储及转置算法
本文要点:1.对称矩阵与稀疏矩阵2.两种矩阵的压缩存储3.代码实现两种矩阵一、对称矩阵1.对称矩阵也是一种N*N的特殊矩阵,并且满足Aij = Aji(设这个矩阵为A,并且有02.对称矩阵的压缩存储如果把矩阵中的每个元素都存储起来,那么就会显得浪费空间,因为每两个关于对角线对称的元素相等,因此就可以将矩阵压缩存储到一个数组Array中,即:将对称的两个元素存一份原创 2016-09-23 22:42:11 · 6441 阅读 · 0 评论 -
后缀表达式的计算
1.中缀表达式转后缀表达式;2.后缀表达式的计算原创 2016-09-11 21:57:17 · 34960 阅读 · 2 评论 -
简单迷宫问题的求解
回溯法解决迷宫问题原创 2016-09-11 18:19:02 · 5777 阅读 · 0 评论 -
斐波那契数列的递归算法与非递归算法
一、斐波那契数列由于斐波纳挈数列是以兔子的繁殖引入的,因此也叫“兔子数列”。它指的是这样一个数列:0,1,1,2,3,5,8,13......从这组数可以很明显看出这样一个规律:从第三个数开始,后边一个数一定是在其之前两个数的和。在数学上,斐波纳挈数列可以以这样的公式表示:F(0) = 0F(1) = 1 F(n) = F(n-1) + F(n-2),(n>=2)二、斐波纳挈数列的实现原创 2016-09-09 09:22:35 · 65419 阅读 · 15 评论 -
BTree
B树是一种多叉的平衡搜索树,适合外查找。一棵M叉(M>2)的B树,可以是一棵空树,也可以是具有如下的性质的B树:(M为)1.根节点至少有两个孩子2.每个非根结点有[M/2,M]个孩子3.每个非根结点有[M/2-1,M-1]个关键字,并且是以升序排列4.key[i]与key[i+1]之间的孩子结点的值介于key[i]与key[i+1]之间5.所有叶子节点在同一层以这组数据原创 2016-11-19 12:39:40 · 646 阅读 · 0 评论 -
排序算法---选择排序&堆排序&冒泡排序
直接选择排序、堆排序、冒泡排序及其比较直接选择排序和堆排序都属于选择排序ps:仍以升序为例!一、直接选择排序直接选择排序的思想:选择排序就是通过n-i次关键字的比较,每次从n-i+1个记录中找出最小的关键字,将其与第i个位置的数据交换。void SelectSort(int* a, size_t size){ assert(a); int max = 0; for (size_t i=原创 2016-12-01 14:42:16 · 1345 阅读 · 0 评论 -
散列表的构造和哈希冲突
----------------------------该篇文章主要写了散列表的6中构造方法以及处理哈希冲突的两种方法----------------------------一、散列表的构造1.直接定址法:直接定址法是根据关键字得到的某一线性函数值作为散列表地址。f(key) = a*key+b,(其中a,b都为常数)这种方法比较简单,但也有缺陷,这种定址方法需要事先知道关键字的分原创 2016-11-08 14:41:47 · 2878 阅读 · 0 评论 -
平衡搜索树中的左单旋&右单旋&双旋
本文要点:平衡搜索树的左单旋、右单旋、左右双旋、右左双旋在平衡搜索树中进行插入结点时,有可能会破坏整棵树的平衡。为了保证平衡不被破坏,就要对一些节点进行旋转,从而来降低树的高度,这样也能保证树的平衡。原创 2016-10-28 17:34:01 · 7159 阅读 · 7 评论 -
哈希表---开链法解决哈希冲突
上篇文章已经写过构造哈希表时用开放定址法解决哈希冲突,这次我就来写写这个开链法解决哈希冲突的问题!一、结点定义我们已经知道开链法大概是一种什么结构了,(如果不知道,这里有讲哦点我点我)显而易见,实现哈希桶的话我们就必须多一个指针next,至少这样才看起来有个链表的样子嘛!![cpp] view plain copy//开链法(原创 2016-11-19 10:17:17 · 7543 阅读 · 0 评论 -
哈希表
哈希表,又称为散列表,它是根据关键码(key)直接访问在内存中的存储的一种数据结构。它通过把关键码根据某一函数进行转换后映射到表中的,这个函数称为散列函数,存放记录的数组称为散列表。一、哈希表的构造如何构造一个散列表?!请看这篇博客^-^:散列表的构造和哈西冲突值得一提的是,构造这个表时,我们需要考虑这个位置的状态,是EMPTY,EXIST 还是DELETE?!当表中还没有原创 2016-11-19 10:19:07 · 483 阅读 · 0 评论 -
排序算法---归并排序
一、归并排序的思想:1.每次将一组数分为两组,直到不能再分为止;2.从个数最小的数组开始比较,每次将比较大(或小)的数放入辅助数组中,辅助数组的下标+1,如此循环,直到有一个数组比较完,此时如果另外一个数组有剩余,就将剩余的这些数字全部按顺序加入辅助数组中。从最小的数组向上一步步累加,如果每次小的数组有序,那么合并以后的数组就有序。(下面这幅图给出的是一种分割两个数组的方法,分的时候最好从原创 2016-11-23 21:59:12 · 441 阅读 · 0 评论 -
排序算法---直接插入排序和希尔排序
排序算法大致可分为:1.插入排序 --- 直接插入排序、希尔排序2.选择排序 --- 选择排序、堆排序3.交换排序 --- 冒泡排序、快速排序4.归并排序本篇博客主要介绍插入排序。。ps:以下两种排序算法都是以升序为例讲解!一、直接插入排序直接插入排序的思想:假设数组第一个数是有序的,从第二个数开始遍历,每拿出一个数就和前面的有序的数比较,如果比它小,就原创 2016-11-26 13:00:42 · 1077 阅读 · 0 评论 -
哈夫曼树以及文件压缩的实现
从哈夫曼树到哈夫曼编码再到文件压缩,一步步讲解,一步步实现原创 2016-12-22 22:20:46 · 25063 阅读 · 8 评论 -
设计一个简单的对象池
在将内存池之前需要先回忆一个以前听过的东西----内存碎片。一、内存碎片是什么我们都知道当需要动态开辟内存时,系统都是在堆上开辟一块空间,尽管开辟出来内存的地址是连续的一块内存空间,但每次开辟的内存块的地址并不是连续的,这样的话当我么开辟的次数变多以后,堆上就剩余许多小块的空间导致在我们需要一块比较大的空间时会开辟失败。这是我们最常听到的一种内存碎片,也成为“外碎片”。其实还有另外一种原创 2016-12-07 19:51:23 · 1758 阅读 · 0 评论 -
非比较排序---计数排序&基数排序
如果给出一组数:2, 2, 9, 5, 3, 9,怎样才能遍历一次该数组就能使其有序呢?!试试之间讲的算法,好像都不行。这里我给出另一种排序算法------非比较排序!非比较排序包括计数排序和基数排序。一、计数排序算法思想:很明显,计数排序当然就需要计数啦,这里就是对这组数组中相同的数据进行计数,并以每个数据的相对位置为下标,将统计出来的次数存放在一个count[ ]数组中原创 2016-12-03 10:41:29 · 678 阅读 · 0 评论 -
二分查找的递归与非递归
二分查找的算法,递归与非递归的实现原创 2016-09-06 22:11:54 · 2211 阅读 · 0 评论