
数据结构与算法(C语言)
文章平均质量分 72
数据结构(C语言)
小-黯
为世界上所有美好而战!
展开
-
数据结构总目录
数据结构总目录原创 2022-04-23 19:27:47 · 2999 阅读 · 0 评论 -
数据结构_红黑树(C语言)
已知新插入的结点为红色,而如果父结点也为红色,就会违反性质四,则说明此时需要调整红黑树同时在父亲结点为红色的条件下,则根据性质二,父亲结点一定不是根结点,且存在祖父结点。原创 2023-01-04 20:01:20 · 1918 阅读 · 0 评论 -
数据结构_B树(C语言)
B树:属于多叉树,存在多个孩子结点,并遵循左小右大的规则,常用于数据库索引原创 2022-08-16 01:13:34 · 1002 阅读 · 4 评论 -
数据结构_哈希表(C语言)
哈希表中元素是由哈希函数确定的,将数据元素的关键字key作为自变量,通过一定的函数关系(称为哈希函数),计算出的值,即为该元素的存储地址。原创 2022-08-04 01:28:35 · 11090 阅读 · 6 评论 -
数据结构_串_顺序结构(C语言)
目录(一)串(二)串代码解析1、串的基本操作1.01 串的基本结构1.02 串的创建1.03 串的遍历1.04 串的匹配1.05 串的连接1.06 串的比较1.07 串的长度1.08 串的复制1.09 串的清空1.10 串的销毁2、串源代码及测试2.1 源代码:2.2 测试(一)串串的顺序结构和顺序表的结构一样,串的区别仅仅是在顺序表数据类型的区别,串的数据类型是字符型,接下来我将实现串的一些基本操作,其中一些基本操作类似于头文件< string >的内置函数(二)串代码解析1、原创 2020-07-22 17:35:32 · 1830 阅读 · 0 评论 -
数据结构_循环链表(C语言)
循环链表1.结构解析循环链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。图示:2.源代码:#include<stdio.h>#include<stdlib.h>typedef char ElemType;typedef struct CNode{ ElemType data; struct CNode *next;}CNode, *CLinkList;void InitList(CLinkList原创 2020-07-17 16:20:13 · 899 阅读 · 0 评论 -
数据结构_双向循环链表(C语言)
循环双向链表1.结构解析双向链表,顾名思义,在双向链表中有两个指针域,一个指向后继结点,另一个指向前驱结点,克服了单链表的单向性缺点图示:2.源代码:#include<stdio.h>#include<stdlib.h>typedef char ElemType;typedef struct DNode{ ElemType data; struct DNode *Prior; struct DNode *next;}DNode,*DLinkList;原创 2020-07-17 17:59:44 · 1179 阅读 · 0 评论 -
数据结构_单链表(C语言)
目录(一)单链表图文解析(二)单链表代码解析(1)单链表的基本操作1.1 创建单链表1.2 初始化单链表1.3 清空单链表1.4 销毁单链表1.5 单链表表长1.6(一)单链表图文解析线性表链式存储结构的特点结点包括两个域:其中存储数据元素信息的域称为数据域;存储直接后继存储位置的域称为指针域。数据域:用一组任意的存储单位存储线性表的数据元素(该组存储单元的地址可以是连...原创 2019-10-07 15:42:07 · 1294 阅读 · 0 评论 -
数据结构_静态链表(C语言)
目录一、静态链表图文解析二、静态链表代码解析1、基本操作1.1 结构1.2 初始化1.3 插入数据1.4 删除数据1.5 修改数据2、源代码及测试2.1 源代码2.2 测试结果一、静态链表图文解析二、静态链表代码解析1、基本操作1.1 结构1.2 初始化1.3 插入数据1.4 删除数据1.5 修改数据2、源代码及测试2.1 源代码2.2 测试结果...原创 2022-04-02 18:32:13 · 3736 阅读 · 5 评论 -
数据结构_链栈(C语言)
目录(一)链栈图文解析(二) 顺序栈代码解析(1) 链栈的基本操作1.1 链栈的存储结构1.2 链栈的初始化1.3 链栈的入栈1.4 链栈的出栈1.5 取栈顶元素(2) 链栈源代码及测试2.1 源代码:2.2 测试结果:(一)链栈图文解析链栈是指采用链式结构实现的栈,和单链表的存储结构相同,用数据域和指针域分别代表存储的数据与指针,与单链表不同的是栈不需要头结点,且只对栈顶元素依次进行入...原创 2020-02-25 18:17:48 · 950 阅读 · 0 评论 -
数据结构_链队(C语言)
目录(一)链队图文解析(二) 链队代码解析(1)链队的基本操作1.1 链队的存储结构1.1 链队的初始化1.1 链队的入队1.1 链队的出队1.1 链队的长度1.1 链队的队头元素1.1 链队的队尾元素(2) 链队源代码及测试2.1 源代码:2.2 测试结果:(一)链队图文解析链队是指采用链式存储结构实现的队列,用单链表来表示,一个链队需要俩个分别指示队头和队尾的头指针和尾指针,同时还需...原创 2020-02-26 20:07:13 · 2206 阅读 · 0 评论 -
数据结构_循环队列(C语言)
目录(一)循环队列图文解析(二) 循环队列代码解析(1) 循环队列的基本操作1.1 循环队列的存储结构1.2 循环队列的初始化1.2 循环队列的入队1.3 循环队列的出队1.4 循环队列的长度1.5 循环队列的头元素1.6 循环队列的尾元素(2) 循环队列源代码及测试2.1 源代码:2.2 测试结果:(一)循环队列图文解析队列,顾名思义就像我们平时排队打饭一样,队尾有人不断来排队打饭,队头...原创 2020-02-26 14:57:51 · 668 阅读 · 0 评论 -
数据结构_顺序二叉树(C语言)
目录二叉树(一)结构解析(二)代码解析1、二叉树的基本操作1.01 二叉树的存储结构1.02 二叉树的初始化1.03 二叉树的创建1.04 二叉树的先序遍历1.05 二叉树的中序遍历1.06 二叉树的后序遍历1.07 二叉树的层序遍历1.08 二叉树的深度1.09 二叉树的查找1.10 二叉树的清空2、源代码及测试2.1 源代码2.2测试二叉树(一)结构解析二叉树的性质特殊形态特点满二叉树深度为k且含有2k - 1个结点的二叉树(每个结点都有左右子结点)完全二叉树对满二原创 2020-07-23 13:49:54 · 3055 阅读 · 5 评论 -
数据结构_顺序表(C语言)
目录顺序表的基本操作创建顺序表初始化顺序表销毁顺序表置空顺序表判断顺序表是否为空取顺序表第i个数据元素查找顺序表某数据位置将某数据插入顺序表删除顺序表中某数据遍历顺序表单链表顺序表的基本操作创建顺序表初始化顺序表销毁顺序表置空顺序表判断顺序表是否为空取顺序表第i个数据元素查找顺序表某数据位置将某数据插入顺序表删除顺序表中某数据遍历顺序表单链表...原创 2019-08-07 11:16:15 · 2031 阅读 · 9 评论 -
数据结构_链式二叉树(C语言)
目录(一)二叉树图文解析(二) 二叉树代码解析(1)二叉树的基本操作1.1 二叉树的存储结构1.2 先序遍历创建二叉树1.3 二叉树的先序遍历1.4 二叉树的中序遍历1.5 二叉树的后序遍历1.6 二叉树的深度1.7 二叉树的结点数1.8 二叉树的叶子数(2) 二叉树源代码及测试2.1 源代码:2.2 测试结果:(一)二叉树图文解析本文章对递归的理解要求较高(反正我是说不清楚的=,=)...原创 2020-02-27 15:10:17 · 683 阅读 · 0 评论 -
数据结构_哈夫曼树(C语言)
哈夫曼树1. 结构解析哈夫曼树是一种二叉树,因为哈夫曼树中没有度为1的结点,则一棵有N个结点的哈夫曼树共有2N-1个结点,所以我们可以存储在一个大小为2N-1的一维数组中。树中的每个结点包括双亲信息和孩子结点的信息,如图:2. 源代码:#include<stdio.h>#include<stdlib.h>#define MAX 999999typedef struct{ int weight, flag;//权值、访问状态 int parent, Lchil原创 2020-08-05 19:05:40 · 2482 阅读 · 0 评论 -
数据结构_线索二叉树(C语言)
线索二叉树1. 结构解析线索二叉树,是一种对链式结构的一般二叉树进行线索的二叉树,其线索过程其实就是对一般二叉树空指针的修改;例如我们按中序顺序,使左空指针指向前驱结点(上一个结点),右空指针指向后继结点(下一个结点),最后所形成的二叉树也就是线索二叉树。结构如图Lchild和Rchild分别表示左右指针域,LTag和RTag分别标志其左右指针是否为空。中序线索二叉树例图2. 源代码:#include<stdio.h>#include<stdlib.h>原创 2020-08-09 19:16:25 · 1020 阅读 · 0 评论 -
数据结构_顺序栈(C语言)
目录(一)顺序栈图文解析(二) 顺序栈代码解析(1) 顺序栈的基本操作1.1 创建顺序栈1.2 初始化顺序栈1.3 入栈1.4 出栈1.5 取栈顶元素(2) 顺序栈源代码及测试2.1 源代码2.2 测试结果(一)顺序栈图文解析顺序栈是指利用顺序存储结构实现的栈,,即利用一组地址连续的存储单位(数组)依次存放自栈底base到栈顶top的数据元素,同时设置指针top表示栈顶元素在顺序栈中的位...原创 2020-02-24 22:37:41 · 1810 阅读 · 1 评论 -
数据结构_排序二叉树(C语言)
排序二叉树1. 结构解析排序二叉树的结构很简单,只遵循一个规则,那就是在二叉树中,选择任意根结点,其左子树都比根节点小,右子树都比根节点大。排序二叉树的查找和插入操作理解都非常简单,只需要按照左小右大的规则即可完成查找和插入观察如下排序二叉树,即可发现排序二叉树的规律,如图:排序二叉树的删除操作较为难理解,删除操作一共分为三种情况(假设删除的结点为p,并且其父结点为f):(1)当p结点的右子树不存在时,因为f的右子树都比f结点大,所以我们只需要将p的父结点指向p的指针指向p的左子树即可原创 2021-03-22 19:03:27 · 3219 阅读 · 1 评论 -
数据结构_根据先序和中序构建二叉树(C语言)
一、根据前序、中序建立二叉树1. 建立过程图解假设我们已知前序序列abcdefg和中序序列cdbaefg则我们可以构建出如下一颗二叉树我们可以根据前序序列(根、左、右)和中序序列(左、根、右)的遍历顺序可得,前序序列的第一个数据是根节点,从而我们可以得知,中序序列中的根节点位置,并确定左右两边的子序列分别为左子树和右子树,进而确定前序序列的左右子树序列,如图:所以构建二叉树的大致过程为:(1)根据前序序列的第一个数据找出中序序列中的根节点位置(2)根据根节点位置,划分出中序序列的左子树和原创 2021-03-21 17:32:48 · 16609 阅读 · 20 评论 -
数据结构_非递归创建二叉树(C语言)
二叉树的非递归创建1. 结构解析非递归创建二叉树需要借助一个栈,在创建二叉树的左子结点的同时,结点压入栈中,通过出栈来回溯创建二叉树的右子结点。假设我们需要创建如下一棵二叉树第一步,按先序顺序分别创建左子结点1、2、3,同时将结点按先序压入栈中,如图:第二步,出栈两次,回溯到第二个结点,设置flag = 0,代表出栈结束,下一次创建的入栈结点是右子结点,第三步,根据flag 的值来确定入栈结点是左子结点还是右子结点:按照一二三步循环创建5、6结点,完成整棵二叉树的创建2. 源原创 2020-08-14 16:53:24 · 4199 阅读 · 0 评论 -
数据结构_非递归遍历二叉树(C语言)
目录(一)图文解析(二) 代码解析(1) 二叉树的基本操作1.0 二叉树的存储结构1.2 先序递归创建二叉树1.3 先序非递归遍历二叉树1.4 中序非递归遍历二叉树1.5 后序非递归遍历二叉树1.6 层序非递归遍历二叉树(2) 二叉树源代码及测试2.1 源代码:2.2 测试结果:(一)图文解析一般二叉树采用的是链式存储结构,也就是单链表的结构,但二叉树的结点包括俩个指针域,一个指向左结点,一个指右结点,即二叉;1、树的度: 不管哪个结点,二叉树都只能最多分出两个分支,所以二叉树的度为2;2、树原创 2020-07-22 10:54:27 · 2970 阅读 · 3 评论 -
数据结构_树_孩子表示法(C语言)
树的孩子表示法1、结构解析树的孩子表示法包括顺序表和链表两种结构,也可以说是顺序表和链表的结合结构,如图:2、源代码:#include<stdio.h>#include<stdlib.h>#define MAX 20typedef struct CNode //孩子结点{ int pos; //孩子位置 struct CNode *next; //孩子指针}CNode, *PChild;typedef struct //根结点 { cha原创 2020-07-29 13:26:20 · 5986 阅读 · 3 评论 -
数据结构_树的孩子兄弟法(C语言)
树的孩子兄弟法1、结构解析树的孩子兄弟法的结构,就是一般二叉树的链式结构,但树的父结点有多个孩子结点,而二叉树只有两个孩子结点,所以我们用二叉树结构中的左指针指向第一个孩子结点,右指针指向下一个兄弟结点,如图:一般表示树的结构图孩子兄弟法表示树的结构图2.源代码:#include<stdio.h>#include<stdlib.h>typedef struct CSNode{ char data; struct CSNode *firstchild,原创 2020-08-05 15:29:42 · 3179 阅读 · 3 评论 -
数据结构_树的双亲表示法(C语言)
树的双亲表示法1、结构解析以一组连续的存储单元存储树的结点,每个结点除了数据域data外,还附设一个parent域用以指示双亲结点的位置,如图:2、源代码:#include<stdio.h>#include<stdlib.h>#define MAX 100typedef char ElemType; typedef struct{ char data; int parent;}PTNode;typedef struct{ PTNode TNod原创 2020-07-25 11:57:07 · 2031 阅读 · 0 评论 -
数据结构_邻接矩阵(C语言)
目录(一) 邻接矩阵图文解析(二) 邻接矩阵代码解析2.1 邻接矩阵的存储结构2.2 邻接矩阵的创建2.3 邻接矩阵的遍历2.4 邻接矩阵的查找(三)源代码及测试3.1 源代码3.2 测试结果(一) 邻接矩阵图文解析建议先学完《线性代数》,那样邻接矩阵就非常容易理解了邻接矩阵主要是对矩阵的理解,首先要理解矩阵是什么,简单的说矩阵就是二维数组,我们可以根据行列位置来描述行与列的关系;如果......原创 2020-02-29 16:08:05 · 5641 阅读 · 12 评论 -
数据结构_邻接表(C语言)
目录(一)邻接表图文解析(二)邻接表代码解析2.1 邻接表的存储结构2.2 邻接表的创建2.3 邻接表的遍历2.4 邻接表的查找(三)源代码及测试3.1 源代码3.2 测试结果(一)邻接表图文解析邻接表的结构比较复杂,包括顶点的存储结构和边的存储结构;顶点结点包括数据域和指针域,边结点包括数据域、指针域和边结点所指向的顶点位置;其中顶点结点由一维数组储存,每个顶点结点又以链栈的结构连接.........原创 2020-02-29 19:56:29 · 1122 阅读 · 1 评论 -
数据结构_邻接多重表(C语言)
邻接多重表1. 邻接多重表图文解析邻接多重表是无向图的一种存储结构因为不考虑边的方向,所以和十字链表相比较,顶点结点只需要一个指针域指向所连接的边结点即可邻接多重表的边结点和顶点结点如下图:由以上结构组成的无向图如下:建议以单个顶点来分析邻接多重表的结构红线:单独以V1顶点连接出的红线来看,红线链表代表以第一条边为参考,所有连接着顶点V1的边绿线:单独以V1顶点连接出的绿线来看,绿线链表代表以第一条边为参考,所有连接着顶点V2的边<依旧以V1顶点单独来看,顶点V1的first原创 2021-04-03 14:13:29 · 2284 阅读 · 2 评论 -
数据结构_十字链表(C语言)
十字链表1. 十字链表图文解析十字链表是有向图的一种存储结构在十字链表里我们称每一条有向边为:弧十字链表的存储结构主要包括:弧结点和顶点结点,如下图:由以上结构组成的有向图如下:红线:与邻接表一样,可以采用头插法插入弧结点绿线:指向同一个尾顶点的弧结点黑线:指向该顶点的绿线弧结点链表,例如顶点V2—>弧的链表(每个弧结点的头顶点都为V2)十字链表的构造方法:2. 源代码及测试#include<stdio.h>#include<stdlib.h原创 2021-03-29 21:34:08 · 10003 阅读 · 9 评论 -
数据结构_深度优先搜索(C语言)
图的遍历1. 深度优先搜索图文解析深度优先搜索(Depth First Search,DBS),遍历过程如下:(1)在图的任意顶点出发(假设从V1出发),首先访问V1(2)在刚访问过的顶点(V1)的相邻顶点中,找出第一个未被访问的顶点(V2),并访问该顶点(V2)(3)以V2为新顶点,递归重复(1)(2)步骤。每当找不到未被访问的顶点时,递归程序都会依次回退,一直到初始顶点V1而后退出程序例如当访问到V6时,递归程序会回退到V7继续查找未被访问的顶点,从而访问到V82. 源代码:#i原创 2021-04-03 17:13:55 · 2571 阅读 · 0 评论 -
数据结构_广度优先搜索(C语言)
图的遍历1. 广度优先搜索图文解析广度优先搜索(Breadth First Search,BFS),遍历过程类似于二叉树的层序遍历,可以参考一下,BFS遍历过程如下:(1)从图中任意顶点出发(V1),访问该顶点(V1),并将该顶点入队(2)若队列不为空,则出队,获取出队顶点V1,(3)遍历出队顶点V1的相邻顶点,并访问未被访问的相邻顶点(4)每访问一个相邻顶点,就将访问的顶点入队。2. 源代码:#include<stdio.h>#include<stdlib.h&原创 2021-04-03 19:45:31 · 3851 阅读 · 0 评论 -
数据结构_最小生成树Kruskal算法(C语言)
图的应用克鲁斯卡尔Kruskal算法对比prim算法,Kruskal主要是对边的操作,依次取得最小边,再将其连通从而得出最小生成树Kruskal主要利用两个数组来实现边数组:边的起始、边的终点、边的权值连通的顶点数组:初始化时Vexset[i] = i代表每个顶点处于各自不同的集合,假设我们连通了第1个和第4个顶点,则可以设置Vexset[1] = Veset[4] = 1,即顶点1和顶点4处于同一连通集合中。1连通过程图如下:232. 源代码:#include<stdio.原创 2021-04-06 17:10:24 · 2075 阅读 · 2 评论 -
数据结构_最小生成树Prim算法(C语言)
图的应用普利姆Prim算法该算法用于求解的问题是,如何用最小代价的边来连通图中的所有顶点,所生成的树称为最小生成树普利姆算法主要借用一个辅助数组,用于记录当前已加入的生成树中,连接其他未加入的顶点之间的最小边权值,构造方法如下:假设从顶点A开始生成树,如图第一行--------图的所有顶点,用数组下标即可表示第二行--------根据边的权值确定新加入最小生成树的顶点,第三行--------最小生成树内所有顶点 到其他未加入生成树的最小边权值初始化辅助数组根据最小的边权值,确定加入生原创 2021-04-05 16:53:30 · 2607 阅读 · 1 评论 -
数据结构_平衡二叉树(C语言)
平衡二叉树原创 2022-06-22 17:32:03 · 701 阅读 · 0 评论 -
数据结构_单源最短路径Dijkstra算法(C语言)
图的应用单源最短路径迪杰斯特拉(Dijkstra)算法2. 源代码:3. 测试:测试环境 : Windows 10编译软件 : Visual C++ 6.0测试用例:原创 2021-04-23 15:40:04 · 4946 阅读 · 3 评论 -
数据结构_最短路径Floyd算法(C语言)
最短路径Floyd算法原创 2022-06-24 19:45:20 · 4782 阅读 · 0 评论 -
数据结构_拓扑排序(C语言)
拓扑排序,是对有向无环图的顶点的一种排序,使得各个顶点之间有序原创 2022-06-25 19:40:41 · 1385 阅读 · 1 评论 -
数据结构_关键路径(C语言)
在图结构中,源点到终点的所有路径中,其中具有最大路径长度的路径称为关键路径。原创 2022-06-27 22:30:34 · 4008 阅读 · 3 评论 -
冒泡排序_算法优化(C语言)
这里写目录标题冒泡排序1.排序原理2.源代码详细排序全过程演示3.算法改进源代码4.最终改进冒泡排序1.排序原理冒泡排序就是通过比较一个序列中相邻的两个数据大小,并交换位置来对数据进行排序的排序方法2.源代码#include<stdio.h>#define N 10int main(){ int i,j,temp; int num[N]={9,8,7,6,5,4............原创 2020-03-27 16:52:32 · 2347 阅读 · 5 评论 -
快速排序_演示过程(C语言)
快速排序1.排序原理任意取序列中的一个数据key值,分别从序列左右两边开始遍历,将小于key值的数据放在key值左边,将大于key的数据放在key值右边,于是我们得到一个以key值作为中间值的序列,然后我们利用递归思想在对key值左右俩个子序列分别重复以上操作,从而达到排序效果排序过程如图数组:num[5]={3,5,1,2,4}key=3i=0 {[3],5,1,2,[4]}......原创 2020-03-28 17:35:25 · 805 阅读 · 0 评论