数据结构及算法
文章平均质量分 78
Warrior-K
冲!(ง •̀_•́)ง
展开
-
高级数据结构及算法:红黑树
文章目录红黑树1. 特点2. 操作2.1 旋转2.2 反色操作2.3 插入往一个2-node节点底部插入新的节点往一个3-node节点底部插入新的节点红黑树1. 特点《算法》中对红黑树的定义(针对的是线的颜色):红色的线永远是左侧链接。(强行的规定)没有一个节点同时链了两条红色的线。(也就是没有4-node)任何从根到叶子节点的路径上有相同颜色的黑线。(黑线节点完美平衡)红黑树合并为2-3查找树:右侧有红色的线,要先通过旋转变为左侧的线,再合并:合并的过程实质上是把红色的线拉成平的原创 2021-08-03 21:58:50 · 98 阅读 · 0 评论 -
高级数据结构及算法:2-3查找树
文章目录2-3查找树1. 特点2. 操作2.1 查找2.2 插入完美平衡(Perfect balance):每条从根节点到叶节点的路径的高度都是一样的(Every path from root to leaf has same length)。也就是每个节点的平衡因子为02-3查找树1. 特点依然满足BST树的特点,即左边的小,右边的大2-3查找树允许出现3节点名称key个数子节点个数2节点(2-node)12(二叉)3节点(3-node)23(三叉)左原创 2021-08-02 16:04:28 · 103 阅读 · 0 评论 -
高级数据结构及算法:AVL树(平衡二叉树)
文章目录AVL树(平衡二叉树)1. 操作1.1 旋转AVL树(平衡二叉树)BST树的缺点是 可能不平衡AVL树是一种满足平衡条件的的BST树AVL树(平衡二叉树):它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。即每个节点的左右子树的高度差绝对值是1或0平衡因子BF(Balance Factor):左树深度减去右树深度的值。平衡因子BF = 左子树深度-右子树深度。平衡二叉树每个结点的平衡因子只能是1,0,-1。若其绝对值超过1,则该二叉排序树就是不平原创 2021-08-01 17:09:25 · 209 阅读 · 0 评论 -
高级数据结构及算法:BST树(二叉查找树)
文章目录二叉查找树1. 特点2. 操作2.1 查找2.2 添加2.3 删除二叉查找树二叉查找树(Binary Search Tree),又被称为二叉搜索树二叉查找树演示连接1. 特点任意节点的左子树不空, 则左子树上所有节点的key均小于它的根节点的key任意节点的右子树不空, 则右子树上所有节点的key均大于它的根节点的key任意节点的左,右子树也分别为二叉查找树没有key相等的节点2. 操作2.1 查找2.2 添加2.3 删除...原创 2021-07-31 13:44:39 · 139 阅读 · 0 评论 -
高级数据结构及算法:树的遍历
文章目录1. 多叉树遍历1.1 深度优先遍历先序遍历后序遍历1.2 广度优先遍历2. 二叉树遍历2.1 深度优先遍历先序遍历后序遍历中序遍历1. 多叉树遍历图形演示1.1 深度优先遍历深度优先遍历:从根节点开始先沿着树的一个枝遍历到叶子节点,再遍历其他的枝。深度优先遍历又分为先序遍历和后序遍历先序遍历上图树的先序遍历结果:A → B → D → G → H → I → C → E → J → F递归深度优先遍历:先序遍历以 力扣589题:叉树的前序遍历 为例/*// Definitio原创 2021-07-28 17:08:24 · 493 阅读 · 0 评论 -
高级数据结构及算法:树的基本概念,树的表示方法
文章目录树的基本概念1. 什么是树?2. 树的构成2.1 节点2.2 度2.3 层次2.4 深度与高度3. 树的分类4. 特殊的树树的表示方法1. 多叉树表示法1.1 双亲表示法1.2 孩子表示法1.3 优化:双亲孩子表示法1.4 孩子兄弟表示法2. 二叉树表示法2.1 顺序存储方式2.2 链式存储方式树的基本概念1. 什么是树?树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:有且仅有一个特定的称为根(root)的结点当n>1时,其余结点可分为m(原创 2021-07-28 16:47:01 · 564 阅读 · 0 评论 -
基础数据结构及算法:高级排序算法,包括归并排序、快速排序、希尔排序
文章目录1. 归并排序2. 快速排序3. 希尔排序4. 其他类型数据排序1. 归并排序归并排序排序思路:拆:先把数组一分为二拆分,最终拆分成单个数字合:再把前半部分有序数组和后半部分有序数组排序#include <stdio.h>#include <time.h>#include <stdlib.h>#include <stdbool.h>void Random(int* arr,int n){ srand(time(原创 2021-05-08 11:52:52 · 124 阅读 · 3 评论 -
基础数据结构及算法:简单排序算法,包括选择排序、插入排序、冒泡排序
文章目录1. 测试框架2. 选择排序3. 插入排序4. 冒泡排序1. 测试框架完成功能:输入数字n,生成n个 0~n 的随机数使用qsort升序排序如果数据为升序则输出1,否则为0#include <stdio.h>#include <time.h>#include <stdlib.h>#include <stdbool.h>void Random(int* arr,int n){ srand(time(NULL));原创 2021-05-07 10:55:06 · 167 阅读 · 1 评论 -
基础数据结构及算法:递归
文章目录递归1. 概念2. 第归流程3. 练习递归1. 概念递归是一种直接或者间接调用自身函数2. 第归流程确定递归公式确定边界条件3. 练习打印1~10#include <stdio.h>void PrintN(int n,int count){ if(n>count) return; printf("%d\n",n); PrintN(n+1,count); //函数自身调用}int main(){原创 2021-05-01 23:57:36 · 130 阅读 · 1 评论 -
基础数据结构及算法:链表优化,栈,队列
文章目录链表再优化1. 链表时间复杂度2. 链表优化:尾指针--减少时间复杂度3. 链表应用题链表再优化1. 链表时间复杂度顺序表和链表时间复杂度:在使用数据结构过程中:如果使用下标访问、尾插较多,最好使用顺序表如果使用插入、删除、头插较多,最好使用链表如果数据量过大,没有足够大的连续空间,需要使用链表2. 链表优化:尾指针–减少时间复杂度为了使链表中尾插的时间复杂度降为1,我们再加入尾指针 Node* tailerlist.h 文件更改部分:list.c 文件更改内容:原创 2021-04-26 20:42:36 · 310 阅读 · 0 评论 -
基础数据结构及算法:链表
文章目录链表1. 理解链表2. 创建链表3. 释放链表指针4. 顺序链表创建5. 链表元素总数,查找下标对应数6. 修改链表数据,规范书写7. 链表新成员的插入8. 链表成员的删除9. 优化链表顺序表通过连续的地址建立元素之间前后连接关系顺序表的缺点:添加和删除操作需要移动元素当数据量特别大的情况,可能没有连续的内存可使用1. 理解链表链表通过指针方式建立元素之间前后连接关系图链表的基本用法:#include <stdio.h>typedef int Element;原创 2021-04-23 15:19:31 · 103 阅读 · 0 评论 -
基础数据结构及算法:顺序表
文章目录先来复习C中的知识数据结构和算法1. 数据结构2. 算法顺序表先来复习C中的知识结构体指针,动态内存#include <stdio.h>#include <stdlib.h>#include <stdbool.h>typedef struct Data{ int* arr; int n;}Data;void PrintData(const Data* data){ // 结构体指针 fo原创 2021-04-22 20:03:30 · 149 阅读 · 0 评论