数据结构
文章平均质量分 95
晓风飞
一个正在努力的小白,会持续给大家更新一些学习纪录,谢谢大家支持,一起进步!加油!
展开
-
归并排序和计数排序讲解
本文将深入介绍归并排序和计数排序这两种经典的排序算法,分别从递归和非递归的角度,以及对于整数排序的特殊情况,展开讨论它们的原理和实现。通过深入了解归并排序和计数排序这两种排序算法的原理和实现,我们可以更好地理解它们的优劣势以及适用场景。选择合适的排序算法对于提高程序的效率和性能至关重要。希望本文的介绍能够为读者提供有益的知识,启发对排序算法的深入思考。晓风飞数据结构LinuxC语言。原创 2024-01-27 11:33:33 · 1360 阅读 · 31 评论 -
快速排序详解
排序算法是一个重要的主题。快速排序是一种经典的基于比较的排序算法,以其高效性而著称。本博客将深入介绍快速排序算法的基本思想,并探讨其三种不同的实现方法:Hoare分区、挖坑法和指针法。我们将逐步解释每一种实现方式,展示其工作原理以及如何选择适当的实现方法。原创 2024-01-27 11:32:14 · 1130 阅读 · 13 评论 -
插入排序和希尔排序
希尔排序是对直接插入排序的优化。当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在好些树中给出的希尔排序的时间复杂度都不固定:希尔排序是插入排序的一种优化,通过引入间隔(gap)概念,对多个子序列进行排序,逐渐减小间隔直至为1。希尔排序的时间复杂度不易精确计算,但一般在O(n^1.3)左右。原创 2024-01-26 11:25:24 · 1284 阅读 · 25 评论 -
二叉树:从基础结构到高级遍历技术
在数据结构中,二叉树因其在搜索、排序和平衡等操作中的高效性而显得尤为重要。在这篇博客文章中,我们将深入探讨二叉树的概念,探索它们在C语言中的实现,并了解它们的实际应用。原创 2024-01-15 23:17:26 · 1078 阅读 · 28 评论 -
堆排序——高效解决TOP-K问题
堆是一种特殊的完全二叉树,其中每个父节点的值都大于或等于其子节点的值(最大堆),或者每个父节点的值都小于或等于其子节点的值(最小堆)。在堆排序中,我们通常使用最大堆。TOP-K问题是指在一个大数据集中找到前K个最大或最小的元素。这个问题在多个领域都非常常见,比如排名、选举、统计和游戏等。常见的例子包括找到考试成绩中的前10名、世界500强企业或者游戏中最活跃的100名玩家。当数据量非常大时,简单的排序方法可能会因为数据量超过内存限制而变得不可行。此外,完整的排序操作的时间复杂度为O(nlogn)原创 2024-01-14 21:30:08 · 1317 阅读 · 44 评论 -
二叉树与堆的深度解析:数据结构中的关键概念及应用
在计算机科学的丰富和多样的领域中,数据结构扮演着核心角色。特别是树和堆,作为高效组织和处理数据的关键结构,它们在算法设计和系统实现中占据着重要位置。从文件系统的层次组织到优先队列的管理,理解这些结构的基础原理对于深入掌握计算机科学至关重要。本文旨在深入探讨树和堆的基本概念、性质及其在实际中的应用,为初学者和有志者提供一个明确的理解路径。在孩子兄弟表示法中,每个节点存储两个指针:孩子指针:指向该节点的第一个孩子。兄弟指针:指向同一父节点的下一个兄弟。// 第一个孩子结点// 指向其下一个兄弟结点。原创 2024-01-07 23:50:23 · 2728 阅读 · 86 评论 -
深入理解堆(Heap):一个强大的数据结构
在计算机科学中,堆(Heap) 是一种非常重要的数据结构,广泛用于各种应用,从数据分析到算法优化,再到系统编程。堆的一个关键特性是其能够快速找到一组数中的最大或最小值。但是,什么是堆?如何在实际编程中实现和使用堆呢?// 指向堆数组的指针// 堆当前的大小// 堆的最大容量} Hp;这里,是一个指向动态分配数组的指针,该数组用于存储堆中的元素。size表示堆中当前元素的数量,而capacity是数组的最大容量。原创 2024-01-07 21:32:32 · 1642 阅读 · 28 评论 -
数据结构-如何实现一个队列?逐步解析与代码示例(超详细)
在计算机科学中,队列是一种非常基础且广泛使用的数据结构。它的工作原理类似于现实生活中的排队:先来的先服务(FIFO, First-In-First-Out)。在本文中,我们将深入探讨如何在C语言中使用链表实现一个队列,并解析相关的代码实现。该队列的实现基于两种结构:QueueNode 和 Queue。// 定义队列数据类型为int// 队列节点的结构体定义// 节点存储的数据// 指向下一个节点的指针} QNode;// 队列的结构体定义// 指向队列头部的指针// 指向队列尾部的指针。原创 2023-12-27 18:56:37 · 2123 阅读 · 79 评论 -
双向链表原来是这样实现的!
我会定期分享我的学习经验,也欢迎大家留言和交流,让我们共同学习和进步!双链表是一种由节点组成的数据结构,每个节点都包含一个数据域和两个指针域,分别指向前一个节点和后一个节点。这种结构为双链表带来了高度的灵活性,使其适用于各种复杂的编程场景。(ListNode)注意下述代码皆是:在SList.h头文件中定义函数在SList.c文件中实现函数在Test.c文件中函数测试}ListNode;SList.c文件中// 双向链表尾插// 将新节点插入到尾节点之后。原创 2023-12-18 22:10:13 · 1407 阅读 · 29 评论 -
数据结构-如何巧妙实现一个栈?逐步解析与代码示例
栈是一个项的有序集合,其中添加(推入)和删除(弹出)项总发生在同一端,称为“栈顶”。他是后进先出的,就好像弹夹里面的子弹一样原创 2023-12-23 23:35:32 · 2180 阅读 · 51 评论 -
单链表原来是这样实现的!
我会定期分享我的学习经验,也欢迎大家留言和交流,让我们共同学习和进步!(Seqlist)在SList.h头文件中//这里只是指针,不是结构体}SLNode;如果您喜欢这篇博客,请分享给您的朋友,也欢迎留下您的评论和反馈。您的支持是我继续分享和创作的动力。希望我们能在未来的博客中再次相见。祝您一切顺利,期待与您再次相会!原创 2023-11-26 22:32:57 · 1300 阅读 · 38 评论 -
基于顺序表实现通讯录
功能要求1)至少能够存储100个人的通讯信息2)能够保存用户信息:名字、性别、年龄、电话、地址等3)增加联系人信息4)删除指定联系人5)查找制定联系人6)修改指定联系人7)显联系人信息。原创 2023-11-23 00:00:52 · 307 阅读 · 41 评论 -
顺序表基本操作全面解析
静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用。所以现实中基本都是使用动态顺序表,根据需要动态的分配空间大小,所以我们实现动态顺序表原创 2023-11-20 15:07:33 · 527 阅读 · 40 评论