数据结构与算法
文章平均质量分 92
无
一条晒干的咸魚
無限進步!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
双向循环链表的原理及应用
双向循环链表是一种链式存储结构,每个节点包含两个指针,分别指向前驱节点和后继节点。链表的尾节点指向头节点,头节点指向尾节点,形成闭环。这种结构兼具双向链表和循环链表的特性,支持高效的前后遍历和数据操作。双向循环链表与双向链表的区别:指的是双向循环链表的首结点中的prev指针成员指向链表的尾结点,并且双向循环链表的尾结点里的next指针成员指向链表的首结点,所以双向循环链表也属于环形结构。原创 2025-06-20 13:46:00 · 409 阅读 · 0 评论 -
单向循环链表、双向链表及双向循环链表的原理及应用
双向循环链表与双向链表的区别:指的是双向循环链表的首结点中的prev指针成员指向链表的尾结点,并且双向循环链表的尾结点里的next指针成员指向链表的首结点,所以双向循环链表也属于环形结构。上图所示的就是一个典型的单向循环链表的结构,可以发现单向循环链表的结构属于环形结构,链表中的最后一个结点的指针域中存储的是链表的第一个结点的地址。如果想要提高单向链表或者单向循环链表的访问速度,则可以在链表中的结点中再添加一个指针域,让新添加的指针域指向当前结点的直接前驱的地址,原创 2025-06-19 12:27:04 · 1067 阅读 · 0 评论 -
顺序表与链表的初步认识
在学习C语言的时候接触的数组在数据结构中是属于线性表的一种,线性表是由一组具有n个相同类型的数据元素组成的。线性表中的任何一个数据元素有且只有一个,以及有且只有一个,另外首元素是没有前驱的,尾元素是没有后继的。某个元素的左侧相邻元素被称为“直接前驱”,元素左侧所有的数据元素被称为“前驱元素”。某个元素的右侧相邻元素被称为“直接后继”,元素右侧所有的数据元素被称为“后继元素”。原创 2025-06-18 10:16:25 · 935 阅读 · 0 评论 -
关于数据结构的简单认识
广义上讲算法是研究数据之间的逻辑关系,然后选择某种方案来存储数据,并在此基础上对数据进行处理,其实更加直白的说:算法指的是计算或者解决问题的步骤。思考一个问题:如果把下面的一个随机数列中的数值按照从小到大顺序进行排列?具体步骤是什么??,将其按从小到大排序。原创 2025-06-17 17:34:30 · 1259 阅读 · 0 评论 -
冒泡排序算法(Bubble Sort)—经典排序算法
导言冒泡排序是最基本、最简单的排序算法之一,它通过多次遍历待排序的数组或列表,依次比较相邻的元素并交换位置,使得较大(或较小)的元素逐渐“浮”到数组的一端。原理分析冒泡排序算法通过多次遍历待排序的数组或列表,依次比较相邻的元素并交换位置,使得较大(或较小)的元素逐渐“浮”到数组的一端。具体来说,算法会从数组的第一个元素开始...原创 2023-10-16 23:07:19 · 608 阅读 · 0 评论 -
快速排序算法(quick sort)——较优的算法
快速排序的最坏运行情况是 O(n²),比如说顺序数列的快排。但它的平摊期望时间是 O(nlogn),且 O(nlogn) 记号中隐含的常数因子很小,比复杂度稳定等于 O(nlogn) 的归并排序要小很多。所以,对绝大多数顺序性较弱的随机数列而言,快速排序总是优于归并排序。快速排序(QuickSort)算法是一种十分高效的排...原创 2023-10-12 18:32:21 · 636 阅读 · 0 评论 -
迪杰斯特拉(Dijkstra's )算法——解决带权有向无向图最短路径
迪杰斯特拉算法(Dijkstra's Algorithm),又称为狄克斯特拉算法,是一种用于解决带权重有向图或无向图最短路径问题的算法。该算法由荷兰计算机科学家艾兹赫尔·狄克斯特拉在1956年发明,是一种广泛应用于网络路由和其他领域的算法。在 2001 年的一次采访中,Dijkstra 博士透露了他设计这个算法的起因和过程...原创 2023-10-14 00:17:15 · 3874 阅读 · 0 评论 -
折半(二分)查找算法—高效搜索算法
折半查找算法(Binary Search Algorithm)是一种高效的搜索算法,常用于已排序的数组或列表中进行查找操作。它的核心思想是通过比较中间元素与目标值的大小关系来确定目标值在数组的哪一部分,从而缩小搜索范围。一、原理折半查找算法利用了已排序数组的特性,采用分治策略,将问题分解为规模更小的子问题。它的基本思路如下...原创 2023-10-15 23:20:29 · 2239 阅读 · 0 评论 -
关于数据结构树的概括
树结构是一种非常重要且广泛应用的数据结构。它以节点和边的形式组织数据,具有层次关系和递归性质。树结构在计算机科学领域中有着广泛的应用,例如文件系统、数据库索引、网络路由等。一、什么是树树是数据结构中的一种,其属于非线性数据结构结构的一种,我们前文所提到的数据结构多数都是线性的,这也是较为简单的数据结构,而接下来的树与图均属...原创 2023-09-28 11:46:13 · 254 阅读 · 0 评论 -
最优二叉树—哈夫曼(huffman)树
哈夫曼树又称最优二叉树,是一类带权路径长度最短的二叉树,有着广泛的应用。基本概念权:将树中的结点赋上一个有着某种意义的数值路径:从A结点道B结点所经过的分支序列路径长度:从A结点道B结点所经过的分支数目查找效率平均查找长度(ASL)取决于树的高度ASL=(1+2*2+3)/4=2 ASL=(1+2+3...原创 2023-10-05 14:02:15 · 4233 阅读 · 0 评论 -
高效排序算法——堆排序
堆排序是一种高效的排序算法,通过构建最大堆或最小堆来实现排序。它的时间复杂度为O(nlogn),适用于大规模数据的排序。一、堆排序的原理堆是一种特殊的完全二叉树,它有以下特点:最大堆:任意节点的值都大于或等于其子节点的值。最小堆:任意节点的值都小于或等于其子节点的值。堆排序的基本思想是利用堆的性质,将待排序的序列构...原创 2023-10-18 08:22:57 · 503 阅读 · 0 评论 -
克鲁斯卡尔(Kruskal )算法——求最小生成树贪心算法
克鲁斯卡尔算法是一种用于求解最小生成树问题的贪心算法。最小生成树是一个连通图的生成树,其边的权重之和最小。一、原理克鲁斯卡尔算法的核心思想是按照边的权重从小到大逐渐选择连通图的边,直到所有顶点都被连接为止。在每一步中,选择当前权重最小的边,若该边的两个顶点尚未连接,则将其添加到最小生成树的边集合中,并将这两个顶点归为同一...原创 2023-10-17 19:39:31 · 2168 阅读 · 0 评论 -
弗洛伊德(Floyd's)算法—解决最短路径经典算法
弗洛伊德算法(Floyd's algorithm)是一种用于解决图中最短路径问题的经典算法。由美国计算机科学家罗伯特·弗洛伊德于1962年提出,该算法通过动态规划的思想,在图中寻找任意两个节点之间的最短路径,具有广泛的应用。本文将详细介绍弗洛伊德算法的原理、实现细节以及应用案例。一、原理动态规划思想:弗洛伊德算法利用了动态...原创 2023-10-11 22:43:11 · 2953 阅读 · 0 评论 -
改进的模式匹配算法—KMP算法
在暴力匹配中,每趟匹配失败都是模式后移一位再从头开始比较。而某趟已匹配相等的字符序列是模式的某个前缀,这种频繁的重复比较相当于模式串在不断地进行自我比较,这就是低效率的根源。理解KMP算法KMP算法,全称为Knuth-Morris-Pratt算法,是一种字符串匹配算法,用于在一个文本串S中查找一个模式串P的出现位置。相较于...原创 2023-10-03 20:15:38 · 247 阅读 · 0 评论 -
浅谈栈与队列
栈1.栈的基本概念栈(Stack):是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。不能插入和删除的一端为栈底(Bottom)栈顶(top):线性表允许进行插入删除的那一端栈底(bottom):固定的,不允许进行插入和删除的那一端空栈:不含任何元素的空表栈顶元素总是...原创 2023-09-29 10:30:50 · 170 阅读 · 0 评论
分享