![](https://img-blog.csdnimg.cn/b941ce0142fb45ac95d3cd1b269aeca1.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
文章平均质量分 66
数据结构
qiuqiuyaq
这个作者很懒,什么都没留下…
展开
-
数据结构 --- 图的遍历 DFS、BFS
什么是DFS、BFS? 一条线走到底,深度优先遍历,每一个顶点只遍历、只打印一次的方式:DFS、BFS 数据结构 --- 图的存储_考拉爱睡觉鸭~的博客-CSDN博客 单纯地把邻接顶点的邻接顶点打印出来,顶点重复遍历,打印多次从 A→F 所有的节点都遍历完了,需要做回退,从F回退到D点,找D点有没有邻接顶点,没有邻接顶点,继续做回退,退到B节点,有未访问的临接顶点,访问C顶点如果遍历的节点已经被遍历了,不能重复遍历,要做回退如果形成环状,也是重复遍历的情况,也要做回.........原创 2022-04-03 22:52:17 · 3653 阅读 · 0 评论 -
数据结构 --- 图的存储
有向带权图矩阵法描述#include <stdio.h>#include <assert.h>#include <string.h>#include <stdlib.h>#define MAX 100//图的结构体描述typedef struct graph { int arcnum; //边数 int vexnum; //顶点数 char vextex[MAX][20]; //存放多个顶点-->顶点用字符串.原创 2022-03-29 13:00:03 · 1624 阅读 · 0 评论 -
数据结构 --- c语言图的基础
本博客主要介绍图的基本概念、图的存储结构和有关图的一些常用算法 1) 图的定义和术语 2) 图的各种存储结构 3) 图的深度优先搜索(DFS)和广度优先搜索(BFS)遍历算法图定义图G由两个集合V和E组成,记为 G = ( V , E )V是顶点的有穷非空集合,E是V中顶点偶对的有穷集,这些顶点偶对称为边。通常V(G)和E(G)分别称为图的顶点集合和边集合注: E(G)可以为空集图的数据结构的形式化定义G = ( V , E ) .........原创 2022-03-28 10:40:05 · 2813 阅读 · 0 评论 -
数据结构 --- 红黑树基础
红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉搜索树。红黑树是特殊的二叉搜索树,意味着它满足二叉搜索树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。除了具备该特性之外,红黑树还包括许多额外的信息。红黑树的每个节点上都有存储位表示节点的颜色,颜色是红(Red)或黑(Black)。红黑树的特性:(1) 每个节点或者是黑色,或者是红色。(2) 根节点是黑色。 如果插入的时候发现根节点变成红色需要进行树的调整(3) 每个叶子节点是黑.原创 2022-03-16 17:02:35 · 447 阅读 · 2 评论 -
数据结构 --- c语言实现哈夫曼树
哈夫曼树的结构体描述#include <stdio.h>#include <stdlib.h>#include <assert.h>#define MAX 100typedef struct huffmanTreeNode { int key; //键--->出现的频率 //char data; //当前频率对应的字符---&..原创 2022-03-09 21:30:49 · 4438 阅读 · 3 评论 -
数据结构 --- 哈夫曼树基础
哈夫曼树(最优树)及其应用路径长度的概念1.路径:从一个结点到另一个结点之间的分支序列2.结点之间的路径长度:从一个结点到另一个结点之间的分支数目3.树的路径长度(用PL表示):从树的根到每一个结点的路径长度之和 - - ->深度之和PL = 0+1+1+2+2+2+2+3=13PL = 0+1+1+2+2+3+3+3=15结点的权:给树的每个结点赋予的一个具有某种实际意义的实数。结点的带权路径长度:从该结点到树根之间的路径长度与结点上权的乘积。树的带....原创 2022-03-09 08:25:19 · 1602 阅读 · 0 评论 -
数据结构 --- c语言实现AVL平衡二叉搜索树
构建数据类型#include <stdio.h>#include <stdlib.h>#include <assert.h>typedef struct { int key; //键 char info[20]; //数据类型--->字符串类型}DATA,*LPDATA;辅助宏 - - -> 宏函数,获取当前节点p节点的高度#define HEIGHT(p) ((p==NULL)?-1:(p->hei...原创 2022-03-05 10:16:48 · 952 阅读 · 7 评论 -
数据结构 --- AVL平衡二叉树基础
平衡二叉树和普通二叉搜索树的区别如果数据是有序的,创建出来的二叉搜索树会出现不平衡的现象(是单边的),单边的情况,和数组的查找速度一样,效率不高,二叉搜索树最坏的情况:4-7-8-9-10,为了提高查找效率,对二叉搜索树做一个调整,调整为平衡的 AVL树是根据它的发明者G.M. Adelson-Velsky和E.M. Landis命名的。 它是最先发明的自平衡二叉查找树,也被称为高度平衡树。 相比于"二叉查找树",它的特点是: AVL树中任何节点的两个子树的高度最大差别为1 平衡二叉树节原创 2022-03-02 16:40:27 · 476 阅读 · 1 评论 -
数据结构 --- c语言二叉搜索树(有序的树)
二叉搜索树基础 左边孩子节点的值 < 父节点的值,右边孩子节点的值 > 父节点的值 每个二叉搜索树的子树也是一棵二叉搜索树 10 充当根节点 18 > 根节点,放在根节点右边;3 < 根节点,放在根节点左边;8 首先与根节点相比较,8 < 根节点,所以应该放在根节点的左边;然后 8 与 3 比较,3 < 8,8 应该放在 3 的右边,持续构建即可 二叉搜索树的特性:中序遍历是一个有序序列,从小到大排序,2-3-4-7-.原创 2022-02-27 15:05:58 · 2593 阅读 · 2 评论 -
数据结构 --- c语言非递归法遍历二叉树
通过队列实现,从上往下一层一层去遍历,A → B、C → D、E、F → G、H1.入队 2.打印数据A入队,打印:A 队列中的元素:A 打印结果:A A出队 判断 A->LChild != NULL,B != NULL,B入队 打印:B 队列中的元素:B 打印结果:A、B判断 A->RChild !=原创 2022-02-25 15:41:27 · 1881 阅读 · 0 评论 -
数据结构 --- c语言递归法遍历二叉树
二叉树的单一个体 - - -> 一个节点、两个指针,结构体的定义和双向链表类似 二叉树可以存任何类型的数据:这里选择存char类型数据 二叉树的结构体描述#include <stdio.h>#include <stdlib.h>#include <assert.h>typedef struct Node { char data; //顶点数据 struct Node* LChild; //左子树的指针 struct No...原创 2022-02-24 15:24:30 · 1088 阅读 · 0 评论 -
数据结构 --- c语言二叉树基础(无序二叉树)
根节点:最上面的节点,父节点、子节点、前驱节点相邻的同一个父节点下面的两个孩子节点:兄弟节点、姊妹节点最外层的绿色部分:叶子节点深度指的是最长那根线有几个节点,最长的线有 3 个节点,深度是 3广度指的是某个节点有几根线出去,对于 F 节点有 2 根线出去,广度是 2一般叶子节点为空,广度是 0无向二叉树,不需要考虑入度、出度,只需要考虑广度和深度结构体指针赋值为空 - - - 空的二叉树只有根节点的二叉树 只有左子树的二叉树 - - - 只有左边一支的二叉树只有右子树的二叉树 - - - 只有右边一支的二原创 2022-02-23 18:04:09 · 1449 阅读 · 0 评论 -
数据结构 --- c语言堆的实现
什么是堆? 一段连续的内存,一般用数组描述堆,用二叉树的方式分析 堆中的数据一般是无序的 用数组描述堆,一般情况下,第一个空间(下标为 [0] 的空间)不使用,如果使用了第一段内存就会不满足序号的特性 上层节点(父节点)比下层节点(子节点)大--->大顶堆 上层节点(父节点)比下层节点(子节点)小--->小顶堆 大顶堆 || 小顶堆在数组中是无序的,按照二叉树的排布:父节点的值大于子节点的值(大顶堆) 完全二叉树:中间不能有空,.原创 2022-02-20 12:31:05 · 763 阅读 · 0 评论 -
数据结构 --- c语言散列结构描述哈希
散列表 描述单一个体:一个数据域,两个指针域 纵向是一个有序链表,横向用来处理哈希冲突 纵向有序是因为要有一个逻辑地址,否则不知道是否产生冲突 有序指的是哈希地址有序,元素不一定是有序的 32与12产生哈希冲突,以12这个节点为头节点创建一个横向链表,把产生哈希冲突的节点放在当前链表中,如果还有存在哈希冲突的元素接着放在后面即可,横向链表采用什么插入方式由自己决定(头插法 || 尾插法) 构建数据类型#include <stdio.h&g..原创 2022-02-18 13:21:17 · 925 阅读 · 2 评论 -
数据结构 --- c语言数组实现哈希结构
#include <stdio.h>#include <stdlib.h>#include <assert.h>typedef struct pair { int key; //构造一个键出来 充当哈希地址的求解 char element[20]; //数据类型}DATA,*LPDATA;typedef struct hashTable { LPDATA* table; //便于初始化,以及判断当前hash地址是否存在冲突 int d.原创 2022-02-17 10:49:17 · 2463 阅读 · 0 评论 -
数据结构 --- c语言实现串
什么是串 串(string):由零个或多个字符组成的有限序列,也称字符串。记为:S = ‘a1a2a3……an’ (n≥0) 如:A= ‘BEIJING’, B= ‘JING’ 和c++中的字符串是一个意思,C语言中当作数据结构去研究 实现串需要存储空间和当前大小 串没有'\0',c++的 string 不能直接用 %s 形式打印,自己实现的串也不能用 %s 打印 串没有'\0',用curSize作为结束标记:串的连接、串的拷贝、串的比较 串的结构体描述.原创 2022-02-15 09:55:24 · 1991 阅读 · 1 评论 -
数据结构 --- c语言实现普通数组队列 & 循环队列 & 链式队列 & 优先队列
队列的特性 存储数据的方式:一般情况下为 FIFO 先进先出的结构 类似食堂排队打饭,排在前面的先打饭 队列的属性 容量 队头标记 队尾标记 队列的分类 数组队列(普通队列+循环队列) 链式队列 优先队列(类似 vip 服务) 普通数组队列 用一个数组充当容量 队头标记 & 队尾标记就是数组下标,可以把它们的初始值等于-1 (保持下标的一致性)或者全部等于0,无强制性要求,只是在放数据的时.......原创 2022-02-13 11:09:00 · 1331 阅读 · 0 评论 -
数据结构 --- c语言实现双向循环链表
只有一个节点的时候,把头指针和尾指针都指向自己,形成了一个环形,通常把这种链表叫作双向循环链表多个节点形成环形双向循环链表主要分为三部分前项指针后项指针数据域第一个节点的前项指针指向最后一个节点,最后一个节点的后项指针指向第一个节点创建节点 把用户的数据变成一个结构体变量创建链表 描述链表最初的状态,创建一个不带数据的链表,链表就是结构体变量和结构体变量连接在一起需要一个表头,由于是环形,如果没有表头不方便表示,创建一个表头起区分作用。创建无头链表也可以,但是也需要有一个节点表示这原创 2022-07-12 14:26:56 · 1441 阅读 · 0 评论 -
数据结构 --- c语言实现双向链表
双向链表主要分为三部分前项指针后项指针数据域一般情况下,创建单一个体,前项指针和后项指针都赋值为空一般采用记录头节点和记录尾节点,再封装的方式写双向链表再定义一个结构体(链表) 通过记录头节点和尾节点的方式去描述链表创建节点 把用户的数据变成一个结构体变量创建链表 描述链表最初的状态头插法①新节点的后项指针指向原来链表的头节点②原来链表的头节点的前项指针指向新节点③把原来的头节点移到新节点的位置打印链表 可以通过前项指针去做打印,也可以通过后项原创 2022-07-07 11:59:35 · 2606 阅读 · 1 评论 -
数据结构 --- 有序链表的构建、合并、反转
链表的结构体描述 #include <stdio.h>#include <stdlib.h>#include <assert.h>#include <time.h>struct Node { int data; struct Node* next;};//创建有头链表struct Node* createList() { //动态内存申请 struct Node* headNode = (struct Node*)mall原创 2022-05-10 18:26:48 · 1578 阅读 · 1 评论 -
数据结构 --- c语言无头链表(二级指针写法)
函数传参的知识 子函数修改了指针,需要传二级指针 堆的结构体描述#include <stdio.h>#include <stdlib.h>#include <assert.h>typedef struct Node { int data; //数据域 struct Node* next; //指针域}LIST,*LPLIST,*LPNODE; //链表 节点创建链表 |节点--->创建一....原创 2022-02-21 12:41:19 · 765 阅读 · 1 评论 -
数据结构 --- c语言实现无头单链表(再封装写法)
再封装的方式,用 c++ 的思想做无头链表 链表的结构体描述(节点)#include <stdio.h>#include <stdlib.h>#include <assert.h> //断言处理 宏typedef int DataType;typedef struct Node { DataType data; struct Node* next;}NODE,*LPNODE;再定义一个结构体(链表) 通过记录头节.....原创 2022-02-14 13:14:58 · 662 阅读 · 2 评论 -
数据结构 --- c语言实现有头单链表
链式结构链式结构可以理解为内存不连续的数组,通过计算机中的零散内存组合在一起单链表的组成 数据域:用来存放用户使用的数据 指针域:用来存放下一个节点的地址 单链表就是多个结构体变量连接在一起,根本上来说单链表就是结构体变量数据结构:具有相似结构的单一个体的组合struct Node //节点{ int data; //数据域 struct Node* next; //指针域:包含下一个节点的地址};原创 2022-02-11 11:12:25 · 1217 阅读 · 1 评论 -
数据结构 --- c语言实现栈(数组栈 & 链式栈 & 双端栈 & 括号匹配问题)
栈的介绍数组栈#include <stdio.h>#include <stdlib.h>#include <assert.h>//用结构体描述单一结构typedef struct { int* dataMemory; //存整数 需要一个数组 用指针表示 int top; //栈顶标记 int maxSize; //最大元素个数 栈容量}STACK,*LPSTACK;//创建栈--->..原创 2022-02-08 12:12:56 · 1246 阅读 · 0 评论 -
数据结构 --- c++实现顺序表
c++实现和c语言实现的区别 把结构体改为类 可以把类型改为模板类型 把函数写在类里面,创建顺序表的函数改为构造函数 少一个参数:类中的数据成员可以表示一个参数,在类中可以访问自己的数据成员,对自己的数据成员做修改 不需要指针指向运算符->访问 不需要判断sqlist是否为空,因为 sqlist 是一个对象,通过 curSize 判断是否为空即可 new一个对象 sqlist ,用对象的方式访问 释放对象,把对象指针置为空原创 2022-02-07 12:05:40 · 1239 阅读 · 0 评论 -
数据结构 --- c语言实现顺序表
线性表零个或者多个数据元素组成的有限序列,除了头部和尾部元素之外的所有元素只有一个前驱元素数据结构体中数组,单链表,双链表 ,循环链表等原创 2022-02-07 09:11:43 · 2234 阅读 · 2 评论