![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 91
小白又菜
大四应届毕业生,软工专业。C/C++
展开
-
[ 数据结构-C实现 ] 算法的时间复杂度
目录1、算法的复杂度2、时间复杂度2.1 时间复杂度的定义2.2 大O的渐进表示法3、常见时间复杂度计算举例3.1 冒泡排序的时间复杂度3.2 二分查找的时间复杂度3.3 阶乘(递归)的时间复杂度3.4菲波那切数列的时间复杂度1、算法的复杂度算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。时间复杂度主要衡量一个算法的运行快慢,而空间复杂度原创 2022-03-05 21:05:07 · 2247 阅读 · 18 评论 -
[ 数据结构 - C实现] 顺序表
目录1、线性表2、顺序表2.1 顺序表的概念2.2 接口3、接口实现3.1 顺序表尾插3.2顺序表头插3.3在指定位置插入数据3.4顺序表尾删3.5顺序表头删3.6 在指定位置删除数据3.7查找数据1、线性表线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串....线性表在逻辑上是线性结构,也就说是...原创 2022-03-10 00:07:36 · 1446 阅读 · 28 评论 -
[ 数据结构_C实现 ] 无头单向非循环链表的简单实现(单链表)
目录1. 链表1.1 链表的概念及结构1.2链表的分类1.3接口2. 接口实现2.1 节点的创建2.2 打印链表2.3 创建新节点2.4尾插2.5头插2.6 尾删2.7 头删2.8查找2.9在pos位置之前插入2.10在pos位置之后插入2.11 删除pos位置2.12删除pos后面的值3.菜单1. 链表1.1 链表的概念及结构概念:链表是一种物理存储结构上非连续、非顺序的存储结构...原创 2022-03-15 11:24:21 · 1834 阅读 · 30 评论 -
[ 数据结构_C实现 ] 双向循环带头链表的简单实现
目录1.双向循环带头链表的介绍。2.双向循环带头链表的接口。3.接口实现。3.1创建新节点3.2创建返回链表的头结点3.3打印链表3.4双向链表查找3.5双向链表在pos的前面进行插入3.5.1 头插3.5.2 尾插3.6双向链表删除pos位置的节点3.6.1 尾删3.6.2 头删4.菜单5.完整代码:6.功能测试:1.双向循环带头链表的介绍。所谓双向循环带头链表可以分为以下3类来进行理解:首先是双向:双向表示后一个节点可以找到原创 2022-03-22 14:26:43 · 3413 阅读 · 22 评论 -
[ 数据结构-C实现 ] 栈 Stack
目录1.栈1.1栈的概念和结构2.栈的实现2.1接口2.2接口的实现2.2.1初始化2.2.2销毁2.2.3入栈--进栈--压栈2.2.4出栈2.2.5判断栈是否为空2.2.6栈的大小2.2.7栈顶完整代码:1.栈1.1栈的概念和结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。原创 2022-03-25 13:08:35 · 2832 阅读 · 22 评论 -
[ 数据结构-C实现] 队列 Queue
目录1.队列1.1队列的概念及结构2.队列的实现2.1接口3.接口的实现3.1初始化3.2销毁分析:3.3入队分析:3.4出队分析:3.5判断是否为空3.6队列的大小3.7返回头结点的元素Data3.8返回尾结点的元素Data4.完整代码5.测试测试结果:1.队列1.1队列的概念及结构队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In Firs..原创 2022-03-26 16:01:22 · 3510 阅读 · 23 评论 -
[ 数据结构 -- 手撕排序算法第七篇 ] 堆、堆排序
1.堆的概念结构及分类以上这段概念描述看起来十分复杂,晦涩难懂。那么堆用通俗语言简单描述如下:堆是一个完全二叉树的顺序存储。在一个堆中,堆的父节点一定大于(或小于)子节点。一旦有一部分不满足则不为堆。堆的性质:1、堆中某个节点的值总是不大于或不小于其父节点的值; 2、堆总是一棵完全二叉树1.2堆的分类1.2.1 大堆在一个堆中,父节点一定大于等于子节点的堆称为大堆。又称大根堆。1.2.2 小堆在一个堆中,父节点一定小于等于子节点的堆称为小堆。又.原创 2022-04-06 20:36:29 · 4182 阅读 · 53 评论 -
[ 数据结构- C语言 ] 堆排序的优化算法
在浏览本篇博文的小伙伴可先浅看一下上篇堆和堆排序的思想:戳这里可跳转上篇博文~~到这里的老铁相比对堆和堆排序有了简单的了解,那么下面我们对之前所写的堆排序进行优化~ Let's go!目录1.堆排序优化算法1.1建堆的时间复杂度1.1.1 向下调整建堆:O(N)1.1.2向上调整建堆:O(N*logN)1.2堆排序的复杂度1.2.1堆排序的时间复杂度1.2.2堆排序的空间复杂度1.3堆排序优化算法的复杂度1.3.1 堆排序优化算法的时间复杂度..原创 2022-04-09 22:58:24 · 3432 阅读 · 38 评论 -
[ 数据结构-C实现 ] 用堆解决TopK问题
TopK问题的引入:想必大家在玩王者农药的时候都遇到过xxx市第xxx韩信,xxx区第xxx赵云。或者说大家今天懒得做饭,想点个外卖,于是乎大家打开美团App,假如说想吃汉堡,大家不知道哪家汉堡好吃,选择了一项叫按评分优先排序,选择排名靠前的店购买。学校有专业前10名。企业有世界500强等等等。这些问题都要对大量数据进行排序,选出较大的K个数据,这里就需要使用TopK算法来解决此类问题。目录1.什么是TopK问题?1.1Top-k问题的基本思路2.Top-K问题逻辑分析2.1建堆..原创 2022-04-10 23:29:18 · 1598 阅读 · 40 评论 -
[ 数据结构-C语言 ] 二叉树--初阶 大总结~~
今天要和大家一起步入一个新的数据结构--二叉树。在学习了解二叉树之前我们先来了解什么是树。目录1.树的概念及其结构1.1树的概念1.2树的相关概念(重点*)1.3树的表示2.二叉树概念及结构2.1概念2.2特殊的二叉树2.3二叉树的性质(重要*)2.4练习题2.5 二叉树的存储结构1. 顺序存储2.链式存储3.二叉树的顺序结构及实现3.1 二叉树的顺序结构3.2堆概念及其结构3.2.1堆的实现3.2.2堆的时间复杂...原创 2022-04-14 11:47:49 · 10797 阅读 · 66 评论 -
[ 数据结构 -- 手撕排序算法第一篇 ] 插入排序
手撕排序算法系列之:插入排序。从本篇文章开始,我会介绍并分析常见的几种排序,大致包括插入排序,冒泡排序,希尔排序,选择排序,堆排序,快速排序,归并排序等。本篇主要来手撕插入排序算法:目录1.常见的排序算法2.插入排序的实现2.1基本思想2.2直接插入排序:2.2.1单趟排序的基本思想:2.2.2单趟排序代码实现:3.插入排序实现代码4.插入排序测试5.直接插入排序特性总结排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减..原创 2022-04-17 11:19:31 · 2030 阅读 · 21 评论 -
[ 数据结构 -- 手撕排序算法第二篇 ] 冒泡排序
手撕排序算法系列之:冒泡排序。从本篇文章开始,我会介绍并分析常见的几种排序,大致包括插入排序,冒泡排序,希尔排序,选择排序,堆排序,快速排序,归并排序等。大家可以点击此链接阅读其他排序算法:排序算法_大合集(data-structure_Sort)本篇主要来手撕冒泡排序~~目录1.常见的排序算法1.1交换排序2.冒泡排序的实现2.1基本思想2.2单趟冒泡排序2.2.1思路分析2.2.2单趟代码实现3.冒泡排序代码实现4.冒泡排序测试5.冒泡排序..原创 2022-04-17 14:29:52 · 6238 阅读 · 35 评论 -
[ 数据结构 -- 手撕排序算法第三篇 ] 希尔排序
手撕排序算法系列之:希尔排序。从本篇文章开始,我会介绍并分析常见的几种排序,大致包括插入排序,冒泡排序,希尔排序,选择排序,堆排序,快速排序,归并排序等。大家可以点击此链接阅读其他排序算法:排序算法_大合集(data-structure_Sort)本篇主要来手撕希尔排序~~目录1.常见的排序算法1.1 插入排序基本思想2.希尔排序2.1希尔排序(缩小增量排序)2.1.1预排序阶段2.1.2插入排序阶段2.2单趟希尔排序2.2.1思路分析3.希尔排...原创 2022-04-18 11:56:33 · 4488 阅读 · 41 评论 -
[ 数据结构 -- 手撕排序算法第四篇 ] 选择排序
手撕排序算法系列之第四篇:选择排序。从本篇文章开始,我会介绍并分析常见的几种排序,大致包括直接插入排序,冒泡排序,希尔排序,选择排序,堆排序,快速排序,归并排序等。大家可以点击此链接阅读其他排序算法:排序算法_大合集(data-structure_Sort)本篇主要来手撕选择排序~~目录1.常见的排序算法1.1选择排序2.直接选择排序2.1基本思想(一次选一个数)2.1.1选择排序动态视频 *(看视频更好理解)2.2基本思想(一次选两个数)3...原创 2022-04-19 20:30:50 · 2396 阅读 · 16 评论 -
[ 数据结构 -- 手撕排序算法第五篇 ] 快速排序 <包含hoare法,挖坑法,前后指针法> 及其算法优化
手撕排序算法系列之第四篇:快速排序。从本篇文章开始,我会介绍并分析常见的几种排序,大致包括直接插入排序,冒泡排序,希尔排序,选择排序,堆排序,快速排序,归并排序等。大家可以点击此链接阅读其他排序算法:排序算法_大合集(data-structure_Sort)本篇主要来手撕快速排序算法~1.常见的排序算法1.1交换排序快速排序属于一种交换排序,因此我们在了解快速排序之前,先了解一下交换排序的基本思想。基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记..原创 2022-04-20 18:09:54 · 1220 阅读 · 36 评论 -
[ 数据结构 -- 手撕排序算法第五篇 ] 快速排序 非递归实现
手撕排序算法系列之第五篇:快速排序(下)从本篇文章开始,我会介绍并分析常见的几种排序,大致包括直接插入排序,冒泡排序,希尔排序,选择排序,堆排序,快速排序,归并排序等。大家可以点击此链接阅读其他排序算法:排序算法_大合集(data-structure_Sort)快速排序的递归实现方法全部总结在这篇:快速排序 <包含hoare法,挖坑法,前后指针法> 及其算法优化这篇文章我们将一起讨论快速排序的非递归实现方法~1.快排非递归的实现思想快排的非递归实现方法是利用了栈(栈 S...原创 2022-04-21 17:49:36 · 6965 阅读 · 33 评论 -
[ 数据结构 -- 手撕排序算法第六篇 ] 归并排序(上)--递归方法实现
手撕排序算法系列之第六篇:归并排序(上)从本篇文章开始,我会介绍并分析常见的几种排序,大致包括直接插入排序,冒泡排序,希尔排序,选择排序,堆排序,快速排序,归并排序等。大家可以点击此链接阅读其他排序算法:排序算法_大合集(data-structure_Sort)这篇文章我们将一起讨论归并排序的递归方法实现目录1.归并的思想2.归并排序的思想2.1基本思想3.归并排序的代码实现(递归法)4.递归方法的代码解析4.1解析4.2注意事项5.归并排序测试6.原创 2022-04-22 22:00:06 · 1568 阅读 · 24 评论 -
[ 数据结构 -- 手撕排序算法第六篇 ] 归并排序(下)-- 非递归方法实现
手撕排序算法系列之第六篇:归并排序(下)从本篇文章开始,我会介绍并分析常见的几种排序,大致包括直接插入排序,冒泡排序,希尔排序,选择排序,堆排序,快速排序,归并排序(上)等。大家可以点击此链接阅读其他排序算法:排序算法_大合集(data-structure_Sort)本篇我们一起来手撕归并排序的非递归实现方法目录1.归并排序非递归的思想2.归并排序非递归的实现步骤及注意事项2.1实现步骤2.2注意事项2.2.1谨防区间访问越界2.2区间修正3.归并非递归...原创 2022-04-23 20:20:33 · 2254 阅读 · 12 评论 -
[ 数据结构 -- C语言版] 一篇文章总结常见的七大排序算法
本篇文章总结了数据结构中常见的七大排序,让大家一篇文章能够收集到七大排序算法。包括:直接插入排序,冒泡排序,选择排序,希尔排序,堆排序,快速排序,归并排序。目录1. 什么是排序1.1常见的排序算法2. 直接插入排序3.冒泡排序4.希尔排序5.选择排序6.堆排序6.1什么是堆,堆的实现6.2堆排序的优化算法6.3堆排序的应用之解决Top-K问题7.快速排序7.1快速排序递归算法7.2快速排序非递归算法8.归并排序8.1归并排序递归算法..原创 2022-04-24 20:41:05 · 1553 阅读 · 37 评论 -
[ 数据结构进阶 - C++ ] 二叉搜索树
二叉搜索树 K模型 KV模型原创 2022-09-21 11:55:21 · 683 阅读 · 14 评论 -
[ 数据结构 - C++] AVL树原理及实现
平衡二叉搜索树-- AVL树 C++实现原创 2022-09-26 17:36:43 · 1022 阅读 · 25 评论 -
[ 数据结构 - C++]红黑树RBTree
数据结构进阶--C++ 红黑树RBTree原创 2022-10-02 11:44:29 · 1109 阅读 · 19 评论