数据结构
文章平均质量分 89
基础数据结构学习
星恒随风
长夜破浪伴晓梦,梦晓伴浪破夜长
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
快速排序扩展:三路划分与自省排序,解决重复元素和最坏退化问题
普通快速排序的核心思想是:选一个基准值key,把数组划分成左右两部分,然后递归排序左右区间。一般情况下,快速排序的平均时间复杂度是O(NlogN),实际性能也很好。当数组中有大量重复元素时,普通二路划分容易产生很多无效递归;当每次选到的基准值都很差时,快排可能退化成O(N²)。为了解决这两个问题,在实际工程中经常会使用一些快排扩展策略。三路划分:解决大量重复元素问题;自省排序:解决最坏情况退化问题。普通快速排序虽然平均性能很好,但并不完美。它主要有两个扩展方向。第一个方向是三路划分。原创 2026-06-02 18:50:04 · 587 阅读 · 0 评论 -
C语言数据结构排序算法详解(下):冒泡排序、快速排序、归并排序和计数排序
直接插入排序希尔排序直接选择排序堆排序冒泡排序快速排序归并排序计数排序其中,快速排序和归并排序是这一篇的重点。快速排序和归并排序都体现了一个非常重要的算法思想:分治思想:把一个大问题拆成若干个小问题,分别解决后再组合结果。不过它们的思路并不一样。快速排序是:先选基准值,把数组划分成左右两个区间,再递归处理左右区间。归并排序是:先把数组不断拆小,再把有序小区间逐步合并成大区间。这一篇会从思想、代码实现、复杂度和稳定性几个角度系统讲清楚。原创 2026-05-30 12:49:12 · 882 阅读 · 3 评论 -
C语言数据结构排序算法详解(上):从插入排序、希尔排序到选择排序、堆排序
本文介绍了C语言中常见的排序算法,重点讲解了插入排序和选择排序两大类算法。文章从排序的基本概念入手,阐述了排序在计算机科学中的重要性,包括提高查找效率、方便数据展示以及作为其他算法的基础。详细分析了评估排序算法的关键维度:时间复杂度、空间复杂度、稳定性、原地性和基于比较的特性。上篇重点讲解了直接插入排序、希尔排序、直接选择排序和堆排序四种算法,包括它们的核心思想、代码实现、复杂度分析和稳定性特点。插入排序类比整理扑克牌的过程,通过将元素插入到已排序区间实现排序;希尔排序是对插入排序的优化;选择排序通过每轮选原创 2026-05-29 23:54:18 · 520 阅读 · 2 评论 -
C语言数据结构:二叉树详解,从概念、性质到链式实现一篇讲清楚
前面学习顺序表、链表、栈、队列时,我们接触的大多是线性结构。每个元素通常只有一个前驱和一个后继。但是现实中的很多数据关系并不是一条线。比如:1.文件夹和文件2.公司组织架构3.家族族谱4.网页 DOM 结构这些结构往往是一层套一层的。树。二叉树是树结构中最重要、最基础的一类。它不仅是后续学习堆、二叉搜索树、AVL 树、红黑树、哈夫曼树的重要基础,也经常出现在递归、搜索、表达式求值和算法题中。原创 2026-05-22 10:35:57 · 676 阅读 · 1 评论 -
C语言数据结构:栈和队列详解,从概念到代码实现一篇讲清楚
栈队列它们看起来比顺序表、链表简单,因为它们的操作规则非常固定。栈只允许在一端插入和删除。队列只允许在一端插入,在另一端删除。但也正因为规则固定,它们在很多场景里非常好用。函数调用栈浏览器前进后退表达式求值括号匹配撤销和恢复消息队列任务调度广度优先搜索生产者消费者模型数据应该按照什么规则进出。这一篇文章就系统梳理栈和队列的概念、结构、图解、C 语言实现以及常见应用。栈是一种特殊的线性表。它只允许在固定的一端进行插入和删除操作。栈顶栈底后进先出,这个也叫LIFO。原创 2026-05-19 20:37:41 · 706 阅读 · 1 评论 -
C语言算法复杂度详解:时间复杂度与空间复杂度一篇讲透
我写出来的代码,到底快不快?占不占内存?这段代码看起来非常优雅。代码短,就一定好吗?不一定。有些代码看起来很短,但运行起来非常慢。有些代码看起来多写了几行,但效率却高得多。所以评价一个算法,不能只看代码长不长,也不能只看能不能跑出结果。1. 时间复杂度:运行得快不快2. 空间复杂度:额外占用内存多不多什么是时间复杂度什么是空间复杂度什么是大 O 表示法如何分析循环和递归复杂度常见复杂度有哪些二分查找为什么是 O(logN)原创 2026-05-10 23:35:37 · 701 阅读 · 0 评论 -
C语言链表详解:从单链表到双向链表
书接上回当我们学习顺序表的时候,我们知道顺序表的底层是一段连续空间。支持随机访问下标访问效率高尾插比较方便结构简单,容易理解头部或中间插入、删除需要搬移大量元素动态顺序表空间不够时需要扩容扩容可能导致空间浪费扩容时还可能需要整体搬迁数据链表。顺序表要求物理空间连续,而链表不要求物理空间连续。如果说顺序表像一排连在一起的座位,那么链表更像一节一节独立的火车车厢。每节车厢可以独立存在,只要上一节车厢知道下一节车厢在哪里,整列火车就能连起来。链表的基本概念单链表的结构和实现。原创 2026-05-10 23:08:15 · 640 阅读 · 0 评论 -
C语言顺序表详解:从动态顺序表实现到扩容原理
学 C 语言的时候,我们一开始接触的数据组织方式往往是数组。数组很好用,因为它可以把一组相同类型的数据连续地放在一起。当前数组里到底有多少个有效数据?插入数据时要不要判断数组是否满了?删除数据后,后面的元素要不要往前挪?空间不够了怎么办?空间给多了会不会浪费?如果想封装成通讯录、学生管理系统,该怎么组织增删查改?顺序表。对数组进行封装,在数组的基础上,增加 size、capacity 等信息,并提供增删查改等接口。如果说数组是一排原始的格子,那么顺序表就是一个“带管理员的数组”原创 2026-05-03 23:51:30 · 708 阅读 · 0 评论
分享