
数据结构
文章平均质量分 90
ChoSeitaku
是一名在校大学生,目前在做C语言、C++、蓝桥杯、算法、考研数学、408的内容,后期会做深度学习、机器学习、神经网络、人工智能、AIGC、WEB3、开发相关的内容
展开
-
图的遍历|深度优先搜索|广度优先搜索(C)
图的基本操作是独立于图的存储结构的。注意到树是一种特殊的图,所以树的遍历实际上也可视为一种特殊的图的遍历。图的遍历算法是求解图的连通性问题、拓扑排序和求关键路径等算法的基础。图的遍历比树的遍历要复杂得多,因为图的任意一个顶点都可能和其余的顶点相邻接,所以在访问某个顶点后,可能沿着某条路径搜索又回到该顶点。图的遍历是指从图中的某一顶点出发,按照某种搜索方法沿着图中的边对图中的所有顶点访问一次,且仅访问一次。为避免同一顶点被访问多次,在遍历图的过程中,必须记下每个已访问过的顶点,为此可以设一个辅助数组。原创 2024-12-17 23:09:43 · 1180 阅读 · 0 评论 -
图的基本概念|存储
图G由顶点集V和边集E组成,记为G=(V,E)其中V(G)表示图G中顶点的有限非空集;E(G)表示图G中顶点之间的关系(边)集合。若V={v1v2vnv1v2vn),则用∣V∣|V|∣V∣表示图G中顶点的个数E={uv∣u∈Vv∈Vuv∣u∈Vv∈V),则用∣E∣|E|∣E∣表示图G中边的条数图的顶点集V一定非空,但边集E可以为空,此时图中只有顶点而没有边。有向图。原创 2024-12-16 14:58:09 · 1192 阅读 · 0 评论 -
排序|归并排序|递归|非递归|计数排序(C)
归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题。ON⋅log2NON⋅log2NONO(N)ON稳定性:稳定计数排序在数据范围集中时,效率很高,但是适用范围及场景有限。时间复杂度:O(MAX(N,范围))空间复杂度:O(范围)稳定性:稳定。原创 2024-10-11 21:56:45 · 652 阅读 · 0 评论 -
排序|冒泡排序|快速排序|霍尔版本|挖坑版本|前后指针版本|非递归版本|优化|三数取中(C)
冒泡排序是一种非常容易理解的排序ON2O(N^{2})ON2O1O(1)O1稳定性:稳定快速排序整体的综合性能和使用场景都是比较好的,所以才敢叫快速排序ON⋅log2NON⋅log2NOlog2NOlog2N稳定性:不稳定。原创 2024-10-10 22:26:30 · 1164 阅读 · 0 评论 -
排序|插入排序|希尔排序|直接选择排序|堆排序的实现即特性(C)
元素集合越接近有序,直接插入排序算法的时间效率越高稳定性:稳定希尔排序是对直接插入排序的优化。当gap > 1时都是预排序,目的是让数组更接近于有序。当gap1gap=1gap1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算稳定性:不稳定直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用ON2O(N^{2})ON2O。原创 2024-10-09 20:44:38 · 1078 阅读 · 0 评论 -
链式二叉树及二叉树各种接口的实现(C)
int val;}BTNode;有左右两个子树节点还有val表示节点存的值int val;}BTNode;exit(-1);return;return;return;//节点个数//叶子节点个数return 0;return 1;//第k层节点个数return 0;return 1;//二叉树销毁return;free(root);//二叉树查找值为x的节点Que q;if (root)原创 2024-10-06 14:48:41 · 1132 阅读 · 0 评论 -
堆排序,TopK问题|向上调整建堆|向下调整建堆(C)
前面建立随机数文件的时候mod了个1000000,在文件里随机添加几个超过一百万的数,看是否出现在程序结果里,如果把这些随机插进去的数都能找到,就代表程序是正确的。把最大的数据选出来以后,把堆顶的数据和最后一个数据交换,最大的数据排好了,在把这个最后的最大的数据不看做堆里的数据,这样,剩下的数据的相对关系没动,左子树还是大堆,右子树还是大堆,把剩下的数看作堆,向下调整选出次大的,代价是。不能使用大堆,否则最大的数进堆以后,就挡在这里,剩下的数就无法进堆。找到以后,在这个非叶子节点的子树里,进行向下调整。原创 2024-09-27 17:06:31 · 1016 阅读 · 0 评论 -
树基本概念及堆的各种接口的实现|二叉树|完全二叉树|向上调整|向下调整(C)
树的基本概念,二叉树,完全二叉树,和堆的基本概念,堆的实现,原创 2024-09-27 11:56:54 · 800 阅读 · 0 评论 -
队列的各种接口的实现(C)
QNode;int size;}Que;将int重命名为QDataType,方便后续对数据结构的修改创建QueueNode,队列节点结构体,包含next指针和数据域,重命名为QNode创建Queue队列结构体,里面存放队头节点和队尾节点以及队列大小,重命名为Que#pragma}QNode;int size;}Que;assert(pq);assert(pq);free(cur);cur = next;assert(pq);原创 2024-09-21 09:26:07 · 427 阅读 · 0 评论 -
栈的各种接口的实现(C)
int top;}ST;创建Stack结构体,重命名为ST,方便后续代码的书写重命名int为STDataType,方便后续对数据类型的修改a是一个指针,用来表示数组capacity表示栈的容量int top;}ST;assert(ps);assert(ps);assert(ps);exit(-1);ps->top++;assert(ps);--ps->top;assert(ps);assert(ps);原创 2024-09-20 22:50:34 · 454 阅读 · 0 评论 -
带头双向循环链表各种接口的实现(C)
LTNode;//pos之前插入xLTNode* LTFind(LTNode* phead, LTDataType x);//删除pos位置exit(-1);while (cur!free(tail);= phead);while (cur!while (cur!= phead)原创 2024-09-19 09:09:41 · 1180 阅读 · 0 评论 -
单链表各种接口的实现(C)
SLTNode;//在pos之前插入x//在pos之后插入x//删除pos位置//删除pos的后一个位置exit(-1);//改变的是结构体指针,要用二级指针else= NULL)//改变的是结构体,用结构体的指针即可elsefree(tail);return cur;原创 2024-09-15 11:03:18 · 1013 阅读 · 0 评论 -
顺序表各种接口的实现(C)
数据结构中顺序表的增删查改的实现原创 2024-08-10 07:03:33 · 903 阅读 · 0 评论 -
【No.01】复杂度|时间复杂度|空间复杂度
在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。函数运行时所需要的栈空间(存储参数、局部变量、一些寄存器信息等)在编译期间已经确定好了,因此空间复杂度主要通过函数在运行时候显式申请的额外空间来确定。实际中我们计算时间复杂度时,并不一定要计算精确的执行次数,只需要大概执行次数,这里使用大O的渐进表示法。在实际中一般情况关注的是算法的最坏运行情况,所以数组中搜索数据时间复杂度为O(N)原创 2024-08-08 18:25:03 · 723 阅读 · 0 评论