
数据结构
文章平均质量分 70
binary~
所有的努力最终都会绕个大圈回报给你。
展开
-
AVL树的学习
AVL树在二叉搜索树的基础上引入了平衡因子的概念平衡因子=左子树高度-右子树高度注:若子树为null则高度视为0当平衡因子的绝对值原创 2022-08-03 15:55:34 · 258 阅读 · 2 评论 -
二叉搜索树
搜索二叉树满足一下条件:树的构建查找操作二叉搜索树最大的优点在于他的查找速率很高所要查找的值:val所在节点的值:dataeg: 在下面树的上查找 16(val==16)过程如下:1.当dataval时,所要查找的值在该树的左子树上,进入左子树继续查找。3.3.当data==val时,该节点就是所要查找的节点。代码实现递归版因为当这棵树特别庞大时,递归可能会导致栈溢出的问题并且递归相对于循环效率要...原创 2022-07-13 20:24:12 · 429 阅读 · 1 评论 -
二叉树再学习
一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。二叉树作为树的一种,是一种重要的数据结构,二叉树中的面试题比较常见的题型大概有下面几个:创建一颗二叉树(先序,中序,后序)、遍历一颗二叉树(先序,中序,后序和层次遍历)、求二叉树中叶子节点的个数、求二叉树的高度、求二叉树中两个节点的最近公共祖先、打印和为某一值的全部路径、求某一节点是否在一个树中等等。二叉树节点BinTreeNode:二叉树:BinTree创建二叉树我们以#代替空指针3 7原创 2022-07-13 09:54:33 · 149 阅读 · 0 评论 -
数据结构——哈希表(散列表)
文章目录一,哈希表(散列表)概念二,哈希(散列)函数的构造哈希(散列)函数的构造原则构造方法平方取中法折叠法保留余数法三,冲突处理散列冲突的方法开放定址法1.线性探测法2.二次探测法3.随机探测法再散列函数法公共溢出区法链地址法四,代码实现1.哈希函数2.链表和哈希表的创建3.哈希表初始化3.从哈希表中根据key查找元素4.哈希表插入元素5.元素删除6.哈希表销毁一,哈希表(散列表)概念大话数据结构里面是这样介绍的:散列表,又称为哈希表(Hash table),采用散列技术将记录存储在一块连续的存储空原创 2022-01-02 22:25:44 · 11870 阅读 · 5 评论 -
查找算法(2022年第一篇博客)
顺序查找算法顺序查找又叫线性查找,是最基本的查找技术,它的查找过程是:从表中的第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录;如果直到最后一个(或第一个)记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查找不成功。代码:int Sequential_Search(int*a,int n,int key){ int i; for(i=1;i<=n;i++) { if(a原创 2022-01-01 02:03:25 · 686 阅读 · 0 评论 -
KMP匹配算法
字串的定位操作通常称为串的的匹配模式KMP算法朴素的模式匹配算法KMP模式匹配算法next数组的推导KMP算法代码KMP模式匹配算法的改进nextval数组的推导朴素的模式匹配算法假设我们要匹配下面的主串S=“goodgoogle”,中,找到T="google"这个字串位置,我们按朴素模式匹配算法需要下面几步1.从主串第一个位置开始,S与T的前三个都匹配成功,第四个匹配失败S:g o o d g o o g l e | | | !T:g o o g l e2.从主串第二个位置开始,重新开原创 2021-12-30 16:47:41 · 436 阅读 · 0 评论 -
数据结构——线索二叉树
线索二叉树原理目录线索二叉树原理本质分析线索二叉数结构的实现线索二叉数存储结构定义二叉树线索化线索二叉树的遍历总结对于n个结点的二叉树,在二叉链存储结构中有n+1个空链域,利用这些空链域存放在某种遍历次序下该结点的前驱结点和后继结点的指针,这些指针称为线索,加上线索的二叉树称为线索二叉树。这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。注意:线索链表解决原创 2021-12-29 14:59:33 · 981 阅读 · 2 评论 -
数据结构——堆(堆排序)
1.堆堆的逻辑结构是一个完全二叉树堆的物理结构是一颗完全二叉树通过下标去实现父子节点关系leftchild=parent*2+1rightchild=parent*2+2就类似于下图1 .向下调整算法(以大堆为例)//向下调整算法(左右子树必须是大堆)void AdjustDown(int*a,int n,int root){ int parent=root; int child=parent*2+1; while(child<n) {原创 2021-12-20 23:40:21 · 691 阅读 · 0 评论 -
数据结构——二叉树(递归)
1什么是二叉树一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。二叉树的特点:1.每个结点最多有两棵子树,即二叉树不存在度大于2的结点。2.二叉树的子树有左右之分,其子树的次序不能颠倒满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为原创 2021-12-17 22:07:56 · 1042 阅读 · 2 评论 -
数据结构——线性表的顺序存储结构
线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素原创 2021-11-18 19:05:52 · 1243 阅读 · 2 评论 -
数据结构——线性表的链式存储结构1(单链表)
结点是由存放数据元素的数据域和存放后继结点地址的指针域组成原创 2021-11-20 13:36:33 · 1483 阅读 · 0 评论 -
数据结构——线性表的链式存储结构2(静态链表)
目录前言定义静态链表的初始化计算当前线性表的长度(准备工作)静态链表的元素插入静态链表的元素删除静态链表的优缺点前言在之前我们用指针实现了单链表的功能,但对于早期的高级语言来说,他们并没有指针,那他们是怎样实现链表的呢?有人就想出用数组来代替指针描述单链表。首先我们让数组的元素都是由两个数据域组成,data和cur。data存放的是数据,cur来存放下一个数组的下标,从而模拟实现了指针的功能。定义用数组描述的链表叫做静态链表//存储结构..原创 2021-11-21 11:07:16 · 951 阅读 · 1 评论 -
数据结构——线性表的链式存储结构3(双向循环链表)
在单链表的每个结点中,在设置一个指向其前驱结点的指针域,最后一个结点又指向头结点,头节点的前驱指针指向最后一个结点,从而构成一个回路。原创 2021-11-21 19:58:22 · 550 阅读 · 1 评论 -
数据结构——特殊的线性表1(栈)
目录栈的定义栈的创建栈初始化栈的销毁入栈出栈返回栈顶判断是否为空返回栈的长度栈的定义栈是限定仅在表尾进行插入或删除的线性表。允许插入或删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。栈的插入操作叫进栈,也称压栈,入栈。栈的删除操作交出栈,有的也叫弹栈。我们用顺序表来实现栈。栈的创建#include<s..原创 2021-11-24 22:44:17 · 398 阅读 · 0 评论 -
数据结构——特殊的线性表(队列)
定义:队列是一种只允许在一端进行插入操作,而在另一端进行删除操作的线性表。原创 2021-11-28 16:13:16 · 852 阅读 · 1 评论