
数据结构和算法
文章平均质量分 74
逐步讲解数据结构和算法,c/c++描述。
easy_understand-ML
持续努力的在校大学生
展开
-
图(graph)
图是由顶点集合及顶点间的关系组成的一种数据结构:G=(V,E)其中:顶点集合V,边集合EV={x|x属于某个数据对象集}E={(x,y)|x,y属于V}(x,y)表示点x到点y的一条双向通路,是无方向的顶点:图中的节点,第几个顶点记作vi两个顶点vi和vj相关联称为顶点vi到顶点vj之间的一条边图分为有向图和无向图在有向图中,顶点对是有序的,顶点对称为顶点x到y的一条边和是两条不同的边。在无向图中,顶点对(x,y)原创 2024-05-15 10:50:43 · 322 阅读 · 0 评论 -
图(graph)
图是由顶点集合及顶点间的关系组成的一种数据结构:G=(V,E)其中:顶点集合V,边集合EV={x|x属于某个数据对象集}E={(x,y)|x,y属于V}(x,y)表示点x到点y的一条双向通路,是无方向的顶点:图中的节点,第几个顶点记作vi两个顶点vi和vj相关联称为顶点vi到顶点vj之间的一条边图分为有向图和无向图在有向图中,顶点对是有序的,顶点对称为顶点x到y的一条边和是两条不同的边。在无向图中,顶点对(x,y)原创 2024-05-10 19:47:37 · 1086 阅读 · 0 评论 -
手撕红黑树
红黑树也是一种带颜色的二叉搜索树,每个节点要么是红色的要不是黑色的。原创 2023-01-08 21:03:44 · 622 阅读 · 2 评论 -
平衡二叉树
T _val;int _bf;//平衡因子 AVLNode < T > * _left;} };这里的平衡因子是右树减左树的高度差。当我们把一个节点插入到平衡二叉树中的时候,就有可能打破原有的平衡,这时候我们就需要调整该树,使它继续保持平衡二叉树的特性。原创 2023-01-02 12:57:52 · 666 阅读 · 3 评论 -
二叉搜索树
二叉搜索树二叉搜索树的实现——K模型插入查找删除非递归写法递归写法拷贝赋值KV模型二叉搜索树的性能分析原创 2022-12-01 00:20:02 · 658 阅读 · 14 评论 -
线性动态规划
f[i][j]有这么几种分法:str1[i]==str2[j],那么f[i][j]=f[i-1][j-1]+1。问题解决:f[i][j]表示字符串1(str1)以i结尾,字符串2(str2)以j结尾的最大子串。我们知道动态规划类题目都会用到上一次的结果,那么f[i][j]怎么用上一层计算的结果来计算呢?f[i][j]表示从开始的位置到i,j位置的路径之和的最大值。因为f[i][j]是要求的那个,所以我们要求出它的状态方程。问题解决:f[i]表示以第i个数结尾的子序列的最大值。ok,现在开始我们做这道题。原创 2022-11-19 17:06:04 · 1155 阅读 · 8 评论 -
动态规划——01背包
动态规划——01背包原创 2022-11-04 09:27:37 · 237 阅读 · 8 评论 -
手撕——排序
排序插入排序希尔排序选择排序堆排序冒泡排序快速排序归并排序原创 2022-07-01 22:50:15 · 450 阅读 · 15 评论 -
数据结构——二叉树
什么是树树的相关概念什么是二叉树特殊的二叉树二叉树的性质链式二叉树二叉树类型的创建二叉树的遍历前序遍历:中序遍历:后序遍历:二叉树节点的个数查找数据为X的节点查找叶子节点的个数第k层节点的个数二叉树的高度二叉树的层序遍历判断二叉树是不是完全二叉树...原创 2022-06-10 16:26:14 · 670 阅读 · 27 评论 -
排序——堆排序
堆排序创建成堆向上调整建堆时间复杂度分析向下调整建堆时间复杂度分析堆排序给我一组数据,如果对他进行堆排序,那么前提就需要把它变成一个堆的形式创建成堆向上调整建堆时间复杂度分析向下调整建堆时间复杂度分析堆排序......原创 2022-05-28 21:00:42 · 258 阅读 · 8 评论 -
数据结构——堆
堆什么是堆堆的实现堆类型的创建堆的初始化堆的向上调整算法和向下调整算法向上调整算法向下调整算法堆的插入堆的删除堆的销毁打印堆什么是堆把所有的元素按照完全二叉树的形式储存在一维数组中,如果该二叉树满足父节点小于等于子节点,叫做小堆;如果该二叉树满足父节点大于等于子节点,叫做大堆。堆的实现堆类型的创建堆的物理结构本质上是顺序存储的,是线性的。但在逻辑上不是线性的,是完全二叉树的这种逻辑储存结构。堆的这个数据结构,里面的成员包括一维数组,数组的容量,数组元素的个数。typedef int HPDa原创 2022-05-27 21:34:48 · 443 阅读 · 13 评论 -
数据结构——队列
队列什么是队列实现队列创建类型初始化队列队列是否为空入队列出队列队列的销毁获得队头的数据获得队尾的数据队列中的数据的个数什么是队列队列也是一种特殊的线性结构。它只允许在一端进行插入数据,在另一端删除数据。插入数据叫做入队列,删除数据叫做出队列。在队尾插数据,在队头删数据。实现队列我们可以用类似链表的结构实现它。每个节点都包括一个数据,以及下一个节点的地址。由于队列的特殊性质(头删,尾插),所以我们包装两个指针,一个指针指向队头,一个指针指向队尾。创建类型节点类型typedef int Qu原创 2022-05-17 06:53:33 · 388 阅读 · 6 评论 -
数据结构——栈
栈什么是栈创建类型初始栈压栈出栈察看栈顶的元素栈的个数栈是否为空栈的销毁什么是栈栈是一种特殊的线性结构,对数据增加及其删除只能在一端进行操作。进行数据删除及增加的一端为栈顶,另一端为栈底。增加数据为压栈。删除数据为出栈。创建类型typedef int StackTypeDate;typedef struct stack{ StackTypeDate* arr; int top; int capacity;}Stack;初始栈void InitStack(Stack*原创 2022-05-15 13:22:04 · 331 阅读 · 0 评论 -
双向循环链表
双向循环链表什么是双向循环链表类型的创建创建双向循环链表的头节点(初始化)打印出链表里面的数据首插,尾插,首删,尾删首插尾插首删尾删pos位置前插入,pos位置删除pos位置前插入pos位置删除利用这两个接口实现,首尾插,删。销毁链表什么是双向循环链表双向:即该节点即可以指向前一个节点,又可以指向下一个节点。循环:节点的头指向尾,节点的尾指向头。类型的创建为什么要把int类型的数据进行重新命名。是为了以后修改数据类型的方便。该结构体类型包括前驱指针,后驱指针以及数据。typedef int原创 2022-05-14 11:34:33 · 238 阅读 · 3 评论 -
数据结构——单链表
单链表单链表描述代码实现创建节点增加节点链表数据的打印单链表的销毁头插尾插尾删头删查找数据的位置在查找位置之前插入在查找位置之后插入删除查找位置的节点单链表描述链表在物理储存结构上是非连续的,它主要是通过指针指向下一个数据的。节点都是动态开辟出来的。我们把数据和指向下一个节点地址的指针叫做一个节点。代码实现创建节点typedef int SLTypeDate;typedef struct SListNode{ SLTypeDate date; struct SListNode*原创 2022-04-27 16:54:09 · 431 阅读 · 17 评论 -
数据结构——复杂度和顺序表
时间复杂度空间复杂度顺序表创建初始化检查容量是否已满尾插头插打印查改增增时间复杂度空间复杂度顺序表内存中开辟连续的储存单元存储数据用以实现增删查改。创建初始化原创 2022-04-22 20:07:58 · 1044 阅读 · 27 评论 -
KMP算法(C语言实现)
KMP算法思路原创 2022-03-24 21:45:03 · 12837 阅读 · 27 评论 -
3秒的你对战“它”有没有胜算——quicksort
目录1.快排思路2.分块实现1.快排思路快速排序的基本思路就是选择一个基数.(我们这个基数的选择都是每一组最左边的数)然后排成:1.基数左边都是不大于它的,左边都是不小于它的2.然后左边、右边继续进行这个基本思路以完成排序作为最后的结束2.分块实现以6个数为一个例子吧!4,2 ,6,3,1,5第一步:确定一个基数,以每次排序最左边的数为基数。本次是4。第二步:左边从第二个数开始与基数进行比较(遇见比基数大的停止比较),右边从最右边原创 2022-01-02 16:08:53 · 1144 阅读 · 15 评论 -
桶排序(简化版)与冒泡排序
桶排序与冒泡排序原创 2022-02-05 17:13:22 · 1827 阅读 · 42 评论