![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
基本数据结构代码实现,持续更新,望诸君耐心等待!!!
一个很懒的人
在路上!
展开
-
排序——基数排序
本文主要介绍基数排序的相关知识:(1)基数排序概念(2)基数排序示例(3)算法效率分析(4)基数排序的应用原创 2021-09-07 16:53:06 · 106 阅读 · 0 评论 -
排序 —— 归并排序
(1)算法思想(2)二路归并——文末附代码实现!手算代码实现(3)归并排序(递归)——文末附代码实现!(4)算法性能分析归并排序#include<bits/stdc++.h>using namespace std;int n=7;int *b=(int *)malloc(n*sizeof(int)); // 辅助数组 //二路归并void Merge(int a[],int low,int mid,int high){ in...原创 2021-09-07 15:43:11 · 173 阅读 · 1 评论 -
排序 —— 选择排序(简单选择排序、堆排序)
本文详细的介绍了以下两种选择排序:简单选择排序堆排序1.简单选择排序(1)算法思想(2)算法实现——文末附代码!(3)算法性能分析2.堆排序(1)堆的概念(大根堆、小根堆)大根堆小根堆(2)建立大根堆算法思想实现代码(3)堆排序——文末附代码!算法思想代码实现(4)算法效率分析推导结论1.简单选择排序#include<bits/stdc++.h>using na.原创 2021-09-07 14:00:57 · 180 阅读 · 0 评论 -
排序——交换排序(冒泡排序、快速排序)
本文详细介绍了以下两种交换排序:冒泡排序快速排序1.冒泡排序(1)算法原理(2)算法实现——文末附代码!!!(3)算法性能分析2.快速排序(1)算法原理(2)代码实现文末附录代码!!!(3)算法效率时间复杂度空间复杂度稳定性另一个角度理解快速排序递归调用空间复杂度(4)算法改进1.冒泡排序代码实现(C++)#include<bits/stdc++.h>using names.原创 2021-09-06 21:11:18 · 254 阅读 · 0 评论 -
排序 —— 希尔排序
(1)希尔排序核心:插入排序 + 分组(2)希尔排序—— 详细过程(3)实现代码见文末(不长考!)(4)算法性能分析实现代码(C++)#include<bits/stdc++.h>using namespace std;int main(){ int a[]={5,7,1,2,4,6}; int n=sizeof(a)/sizeof(a[0]); int d,i,j,temp; for(d=n/2;d>=1;d=d...原创 2021-09-06 17:48:22 · 8656 阅读 · 1 评论 -
排序——插入排序
本文主要介绍以下两方面知识:排序的基本概念插入排序1.排序的基本概念(1)排序的概念(2)排序算法评价指标2.插入排序(1)算法思想(2)算法实现文末附代码(3)算法效率分析(4)优化——折半插入排序插入排序代码(C++)#include<bits/stdc++.h>using namespace std;int main(){ int a[]={5,7,1,2,4,6}; int n=sizeof(a.原创 2021-09-06 16:57:42 · 115 阅读 · 0 评论 -
查找 —— 散列查找
1.概念(1)散列表(哈希表)(2)填装因子2.常见散列函数除留余数法直接定址法数字分析法平方取中法3.冲突处理 —— 拉链法(1) 处理冲突(2)散列查找查找成功查找失败(3)平均查找长度4.冲突处理 —— 开放定址法概念1.线性探测法(1)插入(2)查找查找成功查找失败(3)删除(4)平均查找长度成功失败(5)弊端2.平方探测法(1)插入...原创 2021-09-05 23:12:14 · 180 阅读 · 0 评论 -
查找 —— B树、B+树
本文主要介绍以下几个方面的知识:B树B树的插入与删除B+树B树、B+树 二者对比1.B树的基本概念和性质(1)概念理解基本推导保证m叉树查找效率(两个策略):(2)B树基本概念核心特性:(3)B树高度最小高度(推导):最大高度(推导):2.B树的插入和删除(1)B树插入(2)B树删除3.B+树(1)B+树基本概念(2)B+查找(3)B+树应用4.B树、B+树——对比(1)关键字与分叉差别1:差别2:(2)结点.原创 2021-09-05 18:25:33 · 85 阅读 · 0 评论 -
查找—— 分块查找
本文主要介绍 分块查找的 算法思想、平均查找长度(ASL)、分块查找等分情况下的ASL、分块动态查找表等部分的内容1.算法思想2.折半查找索引表3.查找效率分析4.等分(查找效率)——分块查找顺序查找索引折半查找索引5.动态查找表...原创 2021-09-03 18:56:51 · 174 阅读 · 0 评论 -
查找 —— 折半查找
本文主要介绍以下几方面的知识:折半查找(算法思想、实现代码、效率分析)折半查找判定树(特点、绘制)1.算法思想2.实现代码3.查找效率分析3.折半查找判定树构造(向上取整)特点1:知道结点的个数就能画出折半查找判定树、进而算出ASL特点2:折半查找判定树一定是平衡二叉树(注意树高)特点3:折半查找判定树一定是二叉排序树(失败结点个数)注:向上取整也有类似特性4.折半查找时间复杂度...原创 2021-09-02 17:34:01 · 3602 阅读 · 1 评论 -
查找 —— 基本概念、ASL计算、查找判定树
0.概要本文主要以顺序查找为例介绍以下知识:查找相关的基本概念ASL —— 平均查找长度计算查找判定树的基本知识顺序查找两种优化1. 查找(1)基本概念(2)查找算法评价指标2.顺序查找(1)顺序查找思想(2)实现代码非哨兵实现方式哨兵实现(3)查找效率分析(4)查找判定树计算ASL(5)顺序查找优化方式1(有序表) —— 优化失败ASL(6)顺序查找优化方式2(被查概率不相等) —— 优化成功ASL...原创 2021-09-02 16:15:18 · 1385 阅读 · 0 评论 -
图 —— AOE网及关键路径
0.概述本文主要介绍以下两个方面知识:AOE网关键路径概念、特点,四种时间、求解方法1.AOE网2.关键路径(1)概念(2)四个时间四个时间 —— 关键路径求解:(3)关键路径求解步骤(4)特点...原创 2021-09-01 15:35:32 · 434 阅读 · 0 评论 -
图 —— 拓扑排序
0.概要本文主要介绍以下知识:AOV网拓扑排序逆拓扑排序1.AOV网2.拓扑排序1.基本概念:2.手算3.算法实现4.时间复杂度3.逆拓扑排序1.基本概念(手算):2.算法实现13.算法实现2...原创 2021-08-31 18:33:43 · 108 阅读 · 0 评论 -
图 —— 有向无环图描述表达式
本文主要介绍将 中缀表达式 转化为 最简有向无环图 的方法,其核心思想:最简有向无环图特点 —— 每个运算符的个数都为:11.初始树:——左运算数(左子树) 操作符(根结点) 右运算数(右子树)2.有向无环图概念:3.转化过程4.示例:...原创 2021-08-31 16:38:22 · 580 阅读 · 0 评论 -
图 —— 最短路径问题
0.概要本文主要介绍以下三种方法求解最短路径问题:BFS——单源最短路径问题(简要介绍)Dijkstra_单源最小路径(详细介绍——算法、分析、时间复杂度、实现代码(见文末))3.Floyd_任意两点最小值(多源最短路径)——(详细介绍——算法、分析、时间复杂度、实现代码(见文末))问题描述:解决方法:1.BFS——单源最短路径问题(了解即可)初始化:求解完成:与广度优先生成树的关系:2.Dijkstra_单源最小路径(1)算法思想此算法算是贪心思想实现的,首.原创 2021-08-30 20:23:02 · 512 阅读 · 2 评论 -
图 —— 最小生成树
0.概要本文主要介绍以下三方面内容:生成树和最小生成树概念Prim 算法Kruskal 算法1. 生成树和最小生成树概念(1)生成树(2)最小生成树1.Prim算法(1)算法(2)算法实现思想(了解即可)2. Kruskal 算法(1)算法(2)算法实现思想(了解即可)两种算法对比:...原创 2021-08-30 17:40:14 · 118 阅读 · 0 评论 -
图的遍历 —— DFS、BFS
0.概要本文主要从以下三个方面介绍图的遍历:图的广度优先遍历(BFS)图的深度优先遍历(DFS)两种遍历一般性实现代码(C++)1.图的广度优先遍历(BFS)(1)树 (层次遍历) VS 图 (BFS——广度优先遍历)(2)算法要点——BFS连通图非连通图(3)遍历序列可变性(4)空间复杂度(5)时间复杂度(6)广度优先生成树对⾮连通图的⼴度优先遍历,可得到⼴度优先⽣成森林1.图的广度优先遍历(BFS)(1)算法要点(2)遍历序列可.原创 2021-08-29 19:21:48 · 5263 阅读 · 0 评论 -
图的存储 —— 邻接矩阵法、邻接表法
0.概要本文主要介绍图的两种存储结构——邻接矩阵法、邻接表法(包含它们的实现方式、数据定义、特点)并对比二者有什么不同!|二者对比(具体分析见下文)1. 邻接矩阵法(1)数据结点定义无权值有权值(2)求结点的度(3)特点(4)邻接矩阵的性质 ——矩阵乘法(自乘)2.邻接表(1)数据结点定义(2)结点的度(3)存储视角...原创 2021-08-28 18:33:31 · 346 阅读 · 0 评论 -
图——基本概念和考点
0.概要本文主要介绍了与图相关的基本概念和性质考点!1.思维导图2.图相关概念、性质、考点(1)图的定义(2)无向图、有向图(3)顶点——顶点关系描述(4)连通图、强连通图(5)子图——图的局部(6)连通分量(无向图)、强连通分量(有向图)(7)生成树(无向图)、生成森林(无向图)(8)边的权、带权图(网)(9)几种特殊形态的图完全图稀疏图、稠密图树...原创 2021-08-28 16:55:20 · 182 阅读 · 0 评论 -
平衡二叉树
0.概要本文主要介绍平衡二叉树以下几方面的知识:平衡二叉树的定义平衡二叉树 —— 调整不平衡查找效率分析1.定义最小平衡二叉树:2.平衡二叉树 —— “调整不平衡”(1)LL型(2)RR型(3)LR型(4)RL型3.查找效率...原创 2021-08-26 13:15:27 · 98 阅读 · 0 评论 -
二叉排序树
0.概要本文主要介绍二叉排序树的以下几个方面的知识:二叉排序树的定义二叉排序树的基本操作(增、删、查、构造)二叉排序树查找效率分析1. 定义2.基本操作(增、删、查、构造)(1)查找(2)插入(3)二叉排序树构造(4)删除(三种情况)3.查找效率分析若树高为h,找到最下层的一个结点需要对比 h 次最好情况:n个结点的二叉树最小高度为:log2n +1,则平均查找长度=O(log2n)最坏情况:每个结点只有一个分支,树高 h=n,则.原创 2021-08-26 11:55:21 · 324 阅读 · 0 评论 -
哈夫曼树(最优二叉树)
0.概要本文主要介绍以下三点知识:哈夫曼树相关概念构造哈夫曼树哈夫曼编码1.哈夫曼树相关概念2.构造哈夫曼树3.哈夫曼编码原创 2021-08-25 12:21:51 · 108 阅读 · 0 评论 -
树、森林、二叉树相互转换
0.概要本文主要介绍树、二叉树、森林之间相互转换的方法,以及树、森林与二叉树遍历之间的关系!1.思维导图2.树、二叉树(相互转化)(1)树转化为二叉树(2)二叉树转化为树2.森林、二叉树(相互转化)(1)森林转化为二叉树(2)二叉树转化为森林3.树、森林 与二叉树 遍历之间的关系(1)树与二叉树树的前序遍历序列等于对应二叉树前序遍历序列树的后序遍历序列等于对应二叉树中序遍历序列(2)森林与二叉树森林的前序遍历序列等于对应二叉树前序遍历.原创 2021-08-25 11:26:57 · 709 阅读 · 0 评论 -
线索二叉树
0.概述本文主要从三个方面对线索二叉树展开学习:线索二叉树的基本知识:包括其作用、逻辑结构、存储结构、三种线索二叉树、以及手动画出线索二叉树二叉树线索化:使用代码实现中序、先序、后序三种二叉树线索化,包含其易错点查找线索二叉树的前驱、后继思维导图:三种线索二叉树对比:1.中序线索二叉树(1)逻辑视角(2)数据定义(3)存储视角(4)线索化 —— “利用中序遍历”(5)找后继结点手算机算(6)找前驱结点手算机算2..原创 2021-08-23 22:06:32 · 147 阅读 · 0 评论 -
二叉树——遍历序列构造二叉树
0.概述本文首先给出四种遍历算法的特点,其次给出不能构造唯一二叉树的两种情况,最后给出先序+中序、后序+中序、层次+中序、三种遍历序列构造二叉树的方法!1.四种遍历算法的特点2.不能构造唯一二叉树的两种情况(1)只给出四种遍历序列的 某一种(2)未给出 中序 遍历序列3.遍历序列构造二叉树(1)先序 + 中序(2)后序 + 中序(3)层次+ 中序情况1:情况2:...原创 2021-08-22 18:47:00 · 521 阅读 · 0 评论 -
二叉树——存储结构及遍历
0.概述本文首先以思维导图的方式介绍了全文的知识:二叉树存储结构和四种遍历方法,其次再介绍递归遍历(先序、中序、后序)的两种手算方法、代码实现原理、表达式分析树、递归算法应用,最后介绍了层次遍历的算法实现原理!1.二叉树存储结构(1)顺序存储数据定义:结构细节:适用类型:(2)链式存储数据定义:结构细节:初始化:三叉链表:2.递归遍历(先序、中序、后序)(1)方法一:分支点逐层展开(手算)(2)方法二:分支点逐层展开(手算)先序遍历:中序遍历:.原创 2021-08-22 17:47:47 · 291 阅读 · 0 评论 -
二叉树——常考性质
0.概要本文首先给出二叉树和完全二叉树常考性质的结论,其次在下文给出二者结论的推导过程!!!1、常考性质结论2、推导过程(1)二叉树性质1:性质2:性质3:(2)完全二叉树性质1:性质2:...原创 2021-08-22 14:01:53 · 130 阅读 · 0 评论 -
二叉树——基本术语和特殊类型
0.概述本文首先给出二叉树的基本概念,其次给出几种特殊二叉树的定义和结构1.二叉树基本概念二叉树也是递归定义的数据结构!原创 2021-08-10 12:00:31 · 128 阅读 · 0 评论 -
树——基本知识和考点
0.概述本文首先以思维导图的方式给出树的基本知识,然后给出树的常考性质1.树的基本知识2.树的常考性质性质1:性质2:性质3:性质4:性质5:性质6:原创 2021-08-10 11:17:13 · 203 阅读 · 0 评论 -
串——字符串的基本操作
0.概述本文以代码的方式实现了 字符串的基本操作,如果想要学习 模式匹配算法(BF算法、KMP算法),请参考我的另一篇博客:串——模式匹配(BF算法、KMP算法).1.字符串基本操作实现代码#include<bits/stdc++.h>using namespace std;int main(){ //初始化字符串 string s1="abcdefg"; string s2="123456"; string s3="abcdefg"; //1. 字符串长.原创 2021-08-03 12:02:13 · 188 阅读 · 0 评论 -
串——模式匹配(BF算法、KMP算法)
0.概述本文将从以下几个方面介绍串的基本知识模式匹配算法:以思维导图的方式介绍串的基本知识介绍串的基本存储结构介绍BF算法(文末给出代码实现)介绍 KMP算法,包括 next数组手算方法(文末给出KMP算法实现)实现代码(BF算法、KMP算法)1. 串的基本知识字符串的基本操作,请参考我的另一篇博客:串——字符串的基本操作.2.串的存储结构(1)顺序存储(2)链式存储3.BF算法(朴素模式匹配算法)文末附实现代码!!!查找失败时间复杂度4.K.原创 2021-08-03 12:02:41 · 498 阅读 · 0 评论 -
矩阵的压缩存储
0.概述本文首先探讨以下几个方面的内容:介绍了二维数组存储的逻辑视角和存储视角(行优先存储、列优先存储)以及基于二维数组随机存取特性的寻址方式公式特殊矩阵(对称矩阵、三角矩阵、对角矩阵)的压缩存储的相关知识,其核心思想是 寻址计算稀疏矩阵1.二维数组(1)行优先存储(2)列优先存储2.特殊矩阵的压缩矩阵基本概念与重点知识核心思考问题:(1)对阵矩阵(2)三角矩阵(3)对角矩阵3.稀疏矩阵(1)顺序存储 ——三元组(2.原创 2021-07-31 15:16:23 · 274 阅读 · 0 评论 -
栈的应用——表达式求值
0.概述本文将从以下几个方面(步骤)探索 表达式求值:1. 首先以思维导图的方式展现了表达式求值的总体概况,包括后缀表达式、前缀表达式(基本知识及其用栈实现计算)相关知识2. 以表格的形式给出三种 代码逻辑 1.用栈实现中缀表达式转后缀表达式、2.用栈实现后缀表达式计算、3.用栈实现中缀表达式计算(表达式的操作过程)3. “分而治之” 给出后缀表达式、前缀表达式、中缀表达式转后缀表达式 的 具体实现步骤1. 表达式基本知识2.整体代码逻辑(1).用栈实现中缀表达式转后.原创 2021-07-30 16:10:42 · 329 阅读 · 0 评论 -
栈的应用——逆波兰表达式
0.概述本文实现了以字符串形式输入逆波兰表达式(后缀表达式),实现求值得代码表达式求值具体原理请参考我的另一篇博客:栈的应用——表达式求值.1.代码实现:后缀表达式求值://必须输入整数在10以内的正确后缀逆波兰表达式#include<bits/stdc++.h>using namespace std;#define MaxSize 10 //计算乘除加减结果 int getResult(int b,int a,int op){ int result; if(.原创 2021-07-30 15:16:43 · 123 阅读 · 0 评论 -
栈的应用——括号匹配
0.概述本文以两种方式实现括号匹配(推荐使用第一种):1.数组仿数据结构第一种方式以char数组和int整数仿数据结构实现,具体见代码(完整版)2.栈的原始数据结构第二种方式只给出了核心代码,栈的基本操作(出栈、入栈等),可参考我的另一篇博客:栈——存储结构实现(顺序栈、链栈).括号匹配核心思想:考虑三种情况:1. 左右括号能否匹配成功2. 左括号单身3. 右括号单身1.代码实现:1.数组仿数据结构(完整版)#include<bits/stdc++.h&g.原创 2021-07-30 11:00:12 · 382 阅读 · 0 评论 -
队列——链式存储结构实现
0.摘要本文首先以思维导图的形式介绍链式队列的基本知识,其次给出代码中需要额外注意的地方,最后给出带头结点的队列代码实现方式顺序队列(循环队列)实现,请参考我的另一篇博客: 队列——顺序存储结构实现( 循环队列 - 不同指针指向).1.基本知识2.代码注意点队列结点定义、链式队列定义(结构体定义),链式队列中 front 和 rear 的引用,具体详情见代码!3.链式队列代码实现带头结点#include<bits/stdc++.h>using namespa.原创 2021-07-29 15:43:25 · 508 阅读 · 0 评论 -
队列——顺序存储结构实现( 循环队列 - 不同指针指向)
0.概述本文首先以思维导图介绍队列的基本知识,其次给出循环队列(顺序存储结构)首尾不同指针指向不同位置时,队列的判空和判满条件,最后给出三种不同指针指向的循环队列代码实现!链式队列实现,请参考我的另一篇博客:: 队列——链式存储结构实现.1.基本知识2.不同指针指向,队列判空/判满条件1. rear:指向队尾元素 front:指向队头元素前一个位置(1)牺牲一个存储空间(2)判空条件:front == rear(3)判满条件:(rear+1)%MaxSize == fron.原创 2021-07-29 15:27:22 · 6346 阅读 · 4 评论 -
双栈共享空间
1.概述本文使用代码实现了顺序结构——双栈共享空间2.代码实现顺序双栈#include<bits/stdc++.h>using namespace std;#define MaxSize 20typedef struct{ int data[MaxSize]; int top1; //栈1 int top2; //栈2 }BothStack; //0.初始化双栈 void InitStack(BothStack &S){ S.top1=-1;.原创 2021-07-28 16:07:10 · 900 阅读 · 1 评论 -
栈——存储结构实现(顺序栈、链栈)
0.概述本文首先以思维导图的方式介绍了栈的基本知识,其次介绍栈的本质,最后给出栈的存储结构实现代码:顺序栈和链栈1. 栈的 本质 :操作受限的线性表2. 栈的 特点 :先进后出3. 注意点:栈只是限制了插入和删除的操作位置,并没有限制栈插入删除的操作时间,即:进栈和出栈可以交叉次序进行,此处常会设置选择题1.基本知识2.实现代码:1.顺序栈代码实现#include<bits/stdc++.h>using namespace std;#define.原创 2021-07-28 15:33:12 · 312 阅读 · 0 评论 -
线性表应用——约瑟夫环问题
0.概述本文从 数据结构 的角度看待约瑟夫环问题,以数据结构的三要素 逻辑结构 、 存储结构 、 数据操作 三个方面考虑,解决此问题!1.题目描述n 个人围成一圈,从第一个人开始报数,数到 mm 的人出列,再由下一个人重新从 11 开始报数,数到 mm 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。eg:输入:10 3输出:3 6 9 2 7 1 8 5 10 42.解决思想1.从 逻辑结构 角度看,约瑟夫环问题属于线性结构,对于线性结构其存储结构有两种方.原创 2021-07-27 10:46:21 · 2651 阅读 · 0 评论