
数据结构
文章平均质量分 95
折木`
知道的越多,不知道的也越多
展开
-
归并排序递归实现+非递归实现(C语言版)
本篇文章我将主要向大家介绍归并排序的递归实现和非递归实现。文章目录1. 归并的思想2. 归并排序的递归实现3. 归并排序的非递归实现4. 归并排序的特性总结1. 归并的思想归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。我来简单总结一下上面的说法,归并排序实际上是原创 2021-04-04 18:10:18 · 2001 阅读 · 2 评论 -
【C语言】-快速排序递归实现(左右指针法,挖坑法,前后指针法)+ 非递归实现(栈模拟)+两种优化思路(三数取中,子区间优化)
首先很开心你能阅读这篇文章,本篇文章我将主要向大家介绍快速排序实现。快排的重要性不言而喻,实际上快排的实现方法有很多种,而多数人往往只掌握了一种实现方法,这不论是在未来面试还是工作实践中都是远远不够的。这里我帮大家总结了几种常见的快排实现算法,以及各种优化思路,相信一定会为你带来帮助。下面开始介绍文章目录1. 什么是快排?2. 三种常见实现方法2.1 左右指针法2.2 挖坑法2.3 前后指针法3. 快排优化思路3.1 三数取中法选key3.2 递归到小的子区间时可以考虑插入排序4. 快排非递归实现原创 2021-03-27 11:25:53 · 1393 阅读 · 1 评论 -
直接插入排序+希尔排序(C语言实现)
本篇文章我将向大家介绍两种插入排序算法:直接插入排序和希尔排序。其中直接插入排序是一种比较基础的排序方法,较容易理解,但是效率不高。而希尔排序算是直接插入排序的一个改进版,虽然不是很好理解,但是实现之后的效率相比直接插入排序会大大的提高。接下来我会详细的讲解这两个排序算法的思路,以及实现代码,下面开始介绍。1. 插入排序的思想基本思想:插入排序是一种基础的排序法,把待排序的数据按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插完为止,得到一个新的有序序列。实际中我们在玩原创 2021-03-24 10:40:58 · 1251 阅读 · 3 评论 -
堆的构建(C语言版)
文章目录前言1.认识堆1.1 堆的概念1.2 堆的性质1.3 大根堆和小根堆2. 建堆2.1 设计堆结构2.2 向下调整算法2.3 堆的构建2.4 建堆的时间复杂度前言堆是一种重要的数据结构,现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储。需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆(堆区)是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。我个人也是在前段时间刚刚结束了堆的学习,不得不说的是堆的难度相较于数据结构前期所学的顺序表、链表、栈、队列等要更上一个台阶。不过在原创 2021-03-12 20:32:13 · 1688 阅读 · 1 评论 -
C语言设计实现队列
文章目录前言1. 认识队列2. 设计队列结构3. 队列相关功能实现3.1 队列的初始化3.2 数据入队3.3 数据出队3.4 获取队头数据3.5 获取队尾数据3.6 检测队列是否为空,如果为空返回非零结果,如果非空返回03.7 获取队列中有效元素个数3.8 销毁队列前言队列是线性表中一种特殊的结构,用来存储和管理数据,并解决一些相关的问题。提起队列就不得不提起栈了,栈和队列两种结构十分类似,所以在大多数知识体系中都是将栈和队列放在一块对比学习。这一点我是十分认可的,因此我觉得大家在学习队列之余可以参考原创 2021-03-10 17:50:17 · 411 阅读 · 1 评论 -
C语言设计实现栈
目录前言1.认识栈2. 栈的实现2.1 底层结构的选用2.2 栈的内存结构3.栈的相关功能3.1 初始化栈3.2入栈3.3 出栈3.4 获取栈中有效元素个数3.5 检测栈是否为空,如果为空返回非零结果,如果不为空返回03.6 获取栈顶元素3.7 销毁栈前言栈是线性表中一种特殊的结构,用来存储和管理数据,并解决一些问题。本篇文章我会系统的向大家介绍栈的相关概念,并用C语言实现栈的一些基本功能,比如入栈、出栈、返回栈顶元素等等…下面开始介绍。1.认识栈栈:一种特殊的线性表,其只允许在固定一端进行插原创 2021-03-04 15:45:27 · 556 阅读 · 1 评论 -
双链表----增删查改(C语言版)
前言本篇文章我将会向大家介绍数据结构中另一种常用的链表结构, 带头双向循环链表(双链表)。这种链表结构最复杂,一般用在单独存储数据。实际中使用的链表顺序结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后就会发现结构会带来很多优势,实现反而简单了,后面我们代码实现了就知道了。我将会介绍双链表的以下功能:初始化、打印、尾插、尾删、头插、头删、查找、任意位置前插入、删除任意位置,销毁。每一个功能我都会向大家展示相应的效果,并且分析它就是如何来实现的,下面开始介绍。1. 概念及结构原创 2021-03-01 21:22:10 · 1081 阅读 · 1 评论 -
单链表----增删查改(C语言版)
前言链表是数据结构中一种特别重要的结构,它和顺序表同属于线性表的一种。不同于顺序表的是,链表并没有局限于物理内存上的连续性,而是一种在逻辑上连续的线性表,因此链表可以实现很多顺序表难以实现的功能。形象的理解,链表结构就像现实中链条一样,将一串单个物体串联在一起。数据结构中的链表是主要这样:链表分为多种类型,有单向链表、双向链表、带头链表、不带头链表等等……虽然链表类型多种多样,但实际中最常用的只有以下两种:本篇文章我将主要向大家介绍无头单项非循环链表(单链表),这种链表结构简单,一般不会单原创 2021-02-19 22:51:26 · 1301 阅读 · 2 评论 -
顺序表----增删查改(C语言版)
前言顺序表是线性表的一种,是实际中运用非常广泛的一种数据结构,也应该是每一个初学者所接触到的第一种数据结构。所谓万事开头难,学好顺序表实现就是为数据结构的学习开了一个好头。顺序表一般分为两种,一种为静态顺序表,实质上是一个静态的数组。还有一种是动态顺序表,动态顺序表的内存可以根据使用者需求来自主调整大小。本篇文章我将主要向大家介绍动态顺序表的以下功能:初始化、销毁、打印、尾插、尾删、头插、头删、查找、任意位置的插入、任意位置的删除。每一个功能我都会向大家展示相应的效果,并且分析它就是如何来实现的,下面原创 2021-02-15 16:08:27 · 1110 阅读 · 2 评论 -
时间复杂度和空间复杂度(含例题讲解)
时间复杂度和空间复杂度前言算法效率时间复杂度1.时间复杂度的概念2.大O的渐进(估算)表示法推导大O阶方法(重点!!!):另外有些算法的时间复杂度存在最好、平均、和最坏情况(重点!!!):3.常见时间复杂度计算举例实例1:实例2:实例3实例4:实例5:空间复杂度1.空间复杂度的概念2.常见空间复杂度计算举例实例1:实例2:前言时间复杂度和空间复杂度的求解可以说是所有数据结构初学者所面对的第一个重点,它是衡量一段代码优劣的重要指标。本篇文章博主会详细的向大家介绍求解一段代码时间复杂度和空间复杂度的方法,并原创 2021-02-13 20:43:15 · 3535 阅读 · 0 评论