![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构之路
片羽时光
这个作者很懒,什么都没留下…
展开
-
排序算法(快排,希尔排序)
1. 快速排序算法 思想:通过一趟排序将待排序记录分割成独立的两部分,其中一部分的关键字比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。代码如下: void QuickSort(int arr[],int len) { QSort(arr,1,len)原创 2017-09-26 19:40:02 · 187 阅读 · 0 评论 -
二叉查找树·AVL树·伸展树
一:二叉查找树二叉查找树的特征是:根节点的左孩子小于根节点,而根的右孩子大于根节点。二叉查找树的平均深度为O(logN)。 对于重复的元素,可以采用在节点记录中保留一个附加域以指示发生的频率来处理。二:AVL树AVL树是带有平衡条件的二叉查找树,这个平衡条件必须要容易保持,而且必须保证树的深度必须是O(logN),一棵AVL树是其每个节点的左子树和右子树的高度最多差1的二叉查找树。 ...原创 2018-11-07 19:07:44 · 289 阅读 · 0 评论 -
数据结构之树图篇1
在有向图中,有n个节点,则一总有n(n-1)条边,并且对于每一个节点来说,度最大是n(n-1)/(节点数),此处度包括入度和出度。树的度为树内各节点的度的最大值。二叉树的性质: 1.在二叉树的第i层上至多有2的i-1次方个结点; 2.深度为k的二叉树至多有2的k次方减1个结点; 3.对任何一棵二叉树T,若其终端结点数为n,度为2的结点数为m,则n=m+1; 4.具有n个结点的完全二叉...原创 2018-03-19 22:44:18 · 587 阅读 · 0 评论 -
篇一:二叉树的一生
对于二叉树的数据结构,我们可以如下描述:typedef char ElemType;typedef struct BtNode* // BinaryTreeNode{BtNode* *leftchild;BtNode* *rightchild;ElemType data;}BtNode*, *BinaryTree; 1.根据如上二叉树的数据结构,我们可以原创 2017-09-18 18:46:49 · 319 阅读 · 0 评论 -
篇二:二叉树的一生
此处承接篇一 4. 根据两种序列来创建二叉树 (1)已知前序和中序,来创建二叉树 int FindIs(char *is,int n,ElemType x) { for(int i = 0;i { if(is[i] == x) return i;原创 2017-09-18 19:27:32 · 299 阅读 · 0 评论 -
排序算法(计数排序,基数排序,桶排序)
1. 计数排序 思想:对于有限个一定范围内的整数,我们可以采用遍历的方式得出每一个数的个数,放入相应的值所对应的下标数组的位置中,再通过将原数组从后往前遍历,并对照与 计数数组之间的关系,将原数组数据排好序放入新的数组中。一般情况下k void CountSort(int arr[],int ret[],int k,in原创 2017-10-09 17:15:43 · 970 阅读 · 2 评论 -
朴素的模式匹配算法
有时,我们需要在一个长串T中寻找固定长度的子串S,找出子串在原串中的位置,对于这种操作,我们称之为串的模式匹配 思想:从原串T第一个位置开始,与S中第一个位置数据进行匹配,相同则两个位置均后移,否则,子串退回到第一个位置,原串T退回到第二个位置,....当子串匹配完成,则返回在原串中匹配到的首个位置即可。代码如下: int Index(char *t,char *s原创 2017-09-27 18:30:14 · 414 阅读 · 0 评论 -
排序算法(直接插入,堆排,归并排序)
1. 直接插入排序 思想:其基本思路就是将一个数插入一个已经有序的数据结构中。这里的数组从1下标开始存数据,代码如下: void InsertSort(int *arr,int len) { int i,j; for(i=2;i原创 2017-09-25 21:24:46 · 240 阅读 · 0 评论 -
线索二叉树
线索化二叉树的实质就是把二叉树原来的空指针改为指向前驱和后继结点,由此,二叉树的线索化存储结构定义如下: typedef enum{Link,Thread} PointerTag; //枚举类型,Link=0表示指向左右孩子指针,Thread=1表示指向前驱结点或后继结点 typedef struct BiThrNode原创 2017-09-27 16:05:47 · 249 阅读 · 0 评论 -
排序算法——冒泡,简单选择排序
1.冒泡排序 思想:每次从0位置开始,arr[0]与arr[1]比较,大则交换,再将aa[1]与arr[2]进行比较.......一遍完成之后,最大的值一定在arr[len-1]的位置上。第二遍又从arr[0]开始,与后面相邻位置比较,直到arr[len-2]的位置结束,第三遍......直到排好序。代码如下: for(int i=0;i { for(原创 2017-09-25 20:28:15 · 161 阅读 · 0 评论 -
散列
一:散列函数散列是一种用于以常数平均时间执行插入,删除和查找的技术。每个关键字被映射到从0到tablesize-1这个范围中的某个数,并且被放到适当的单元中,这个映射就叫做散列函数。 通常,我们可以以一个素数来作为表的大小。 散列冲突是说两个关键字散列到同一个值。二:冲突解决冲突解决的办法有两种:分离链接法和开放定址法。1.分离链接法 其做法是将散列到同一个值的所有元素保留到同...原创 2018-11-20 23:06:56 · 286 阅读 · 0 评论