数据结构初阶
文章平均质量分 89
介绍数据结构当中相对初阶的内容,包括顺序表、单链表、双链表、栈、队列、堆、树,以及常见的八大排序,其余数据结构进阶内容将会在C++专栏与C++一同更新。
林慢慢脑瓜子嗡嗡的
如果能帮到你,那真是太好了!
展开
-
手撕红黑树(Red-Black Tree)
红黑树 (C++实现)原创 2022-07-06 17:03:18 · 3038 阅读 · 5 评论 -
手撕AVL树 (C++ 实现)
AVL 树的定义、代码实现、性能分析原创 2022-06-29 14:49:24 · 1325 阅读 · 4 评论 -
手撕二叉搜索树(Binary Search Tree)
红黑树前戏——二叉搜索树原创 2022-06-23 15:39:27 · 1166 阅读 · 1 评论 -
LeetCode刷题——括号匹配问题
前言:这次介绍一道用C语言刷题很难受的一题,主要用到“栈”的思想。1.括号匹配问题OJ链接给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。思路分析:由于栈结构的特殊性,非常适合做对称匹配类的题目。首先要弄清楚,字符串里的括号不匹配有几种情况。先来分析一下 这里有三种不匹配的情况:,第一种情况,字符串里左方向的括号多余了 ,所以不匹配。 第二原创 2021-10-24 17:45:59 · 6054 阅读 · 19 评论 -
两万字搞定《数据结构》 八大排序 必读(建议收藏)
前言:本章将介绍常见八大排序包括如下直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快排、归并排序以及计数排序(基数排序),本章内容是重点中的重点!!!铁子们务必全部掌握!!!文章目录1.插入排序1.1直接插入排序1.2希尔排序2.选择排序2.1 选择排序(二元改进版)2.2 堆排序3.交换排序3.1 冒泡排序3.2 快速排序3.2.1 Hoare3.2.2 前后指针法3.2.3 挖坑法3.3 快速排序(非递归)4.归并排序4.1 递归实现归并排序4.2 迭代实现归并排序5.计数排序6.八大排序对原创 2021-10-18 08:45:00 · 17811 阅读 · 131 评论 -
【数据结构】二叉树经典入门算法题集锦(下)
前言:本章将通过五道来自LeetCode/牛客网中的二叉树相关算法题来介绍数据结构中二叉树在算法题中的应用,题目难度不大,大家就当放松放松。文章目录1.二叉树的最大深度思路分析:题解:2.平衡二叉树思路分析:题解:3.二叉树的后序遍历思路分析:题解:4.二叉树的中序遍历思路分析:题解:5.翻转二叉树思路分析:题解:1.二叉树的最大深度OJ链接给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。思路分析:二叉树的最大深度等价于:左右子树的最大深度原创 2021-10-16 09:10:10 · 1961 阅读 · 49 评论 -
【数据结构】二叉树经典入门算法题集锦(上)
前言:本章将通过六道来自LeetCode/牛客网中的二叉树相关算法题来介绍数据结构中二叉树在算法题中的应用。文章目录1.单值二叉树思路分析:题解:2.二叉树的前序遍历思路分析:题解:3.相同的树思路分析:题解:4.对称二叉树思路分析:题解:5.另一棵子树思路分析:题解:6.二叉树遍历思路分析:题解:1.单值二叉树OJ链接如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。思路分析:我们知道“”具有传递性原创 2021-09-30 23:02:47 · 1458 阅读 · 40 评论 -
【数据结构】 二叉树的简单理解和代码实现
前言:本章主要介绍二叉树的链式结构,及其前序、中序、后序遍历操作,还有 二叉树的其它基本操作包括求结点个数、求叶子结点个数、求第K层结点个数、求二叉树深度等。文章目录二叉树的链式结构二叉树的遍历方式前序/中序/后续遍历代码实现二叉树的基本操作求二叉树结点个数求二叉树叶子结点个数求二叉树第K层结点个数求二叉树的深度/高度查找二叉树中值为x的结点二叉树源代码二叉树的链式结构链式结构实现如下:typedef char BTDataType;typedef struct BinaryTreeNode原创 2021-09-30 23:00:55 · 1254 阅读 · 27 评论 -
【数据结构】链表经典算法题集锦
前言:本章将分享十一道来自LeetCode/牛客网中的经典链表算法题来介绍数据结构中链表在算法题中的应用。文章目录1.删除链表元素思路分析:题解:2.反转链表思路分析:题解:3.链表中间结点思路分析(快慢指针法):题解:4.链表中倒数第K个结点思路分析(快慢指针法):题解:5.合并两个有序链表思路分析:题解:6.链表分割思路分析:题解:7.链表的回文结构(第2题和第3题的综合)思路分析:题解:8.相交链表思路分析:题解:9.环形链表I思路分析:题解:10.环形链表II思路分析:题解:11.复制带随机指针原创 2021-09-12 11:04:41 · 9967 阅读 · 156 评论 -
【数据结构】 堆的简单理解和代码实现
前言:本章将详细介绍堆,并通过代码创建堆、实现一些堆的基本操作,最后以TopK问题为文章结尾。 By the way,咱们数据结构中的堆是一种数据结构,堆必然是完全二叉树,而系统层的堆是操作系统中管理内存的一块区域分段,注意区分开。文章目录1.堆的概念、性质什么是堆:堆的性质:2.堆的代码实现和基本操作定义堆堆的向上调整堆的向下调整堆的初始化堆的销毁堆的插入操作堆的删除操作获取堆顶的元素堆的判空堆内元素数量打印堆内元素3.TopK问题(即在N个数当中,选出最大/小的K个元素)4.源码链接1.堆的概念原创 2021-09-07 12:59:01 · 2382 阅读 · 112 评论 -
【数据结构】 树与二叉树的基本概念、结构特点及性质
前言:本章内容主要是数据结构中树与二叉树的基本概念、结构特点及性质的引入。文章目录树的概念树的特点:树的常用术语:树的表示:代码创建:树在实际中的应用:二叉树的概念特殊的二叉树满二叉树完全二叉树二叉树的性质及其推导:练习题:习题1:习题2:习题3:树的概念数据结构中的定义的树比较有趣,它是我们所见真实树的倒置,然后再抽象的一种结构,比较有意思。同时使用树这种数据结构,可以描述现实生活中的很多事物,例如家谱、企业的组织架构等等。树是由n(n>=0)个有限结点组成一个具有层次关系的集原创 2021-09-04 14:51:34 · 5038 阅读 · 65 评论 -
【数据结构】 队列的简单理解和基本操作
前言:本章介绍的主要内容是数据结构中队列的概念,并通过代码实现链式结构的队列。文章目录1.队列的基本概念1.1 队列的定义1.2 队列的特点2.队列的代码实现2.1 队列存储的说明2.2 队列的定义2.3 队列的初始化2.4 队列的判空操作2.5 队列的入队操作2.6 队列的出队操作2.7 队列的获取队首元素操作2.8 队列的获取队尾元素操作2.9 队列的计算队列元素数量操作2.10 队列的销毁操作3.源码链接1.队列的基本概念1.1 队列的定义只允许在一端进行插入数据操作,在另一端进行删除数原创 2021-08-31 19:49:04 · 1685 阅读 · 83 评论 -
【数据结构】 栈的简单理解和基本操作
前言:本章介绍的主要内容是数据结构中栈的概念和栈的基本操作,包括:栈结构的定义、初始化、容量检查、判空、入栈、出栈、读取栈顶元素、读取栈内元素个数、栈的销毁等操作的具体实现。文章目录1.为什么需要栈?1.1栈的概念2.栈项目文件搭建2.1 栈结构的代码实现2.2 栈的初始化2.3 栈的检查容量操作2.4 栈的判空操作2.5 栈的入栈操作2.6 栈的出栈操作2.7 栈的读取元素数量操作2.8 栈的读取栈顶操作2.9 栈的销毁操作3.源码链接1.为什么需要栈?1.1栈的概念栈:一种特殊的线性表,其原创 2021-08-22 14:18:05 · 1582 阅读 · 47 评论 -
【数据结构】 双链表的简单理解和基本操作
前言:本章主要内容是双向循环链表(即双链表)的概念,和其基本操作:包括定义、创建、初始化、判空、尾插、头插、尾删、头删、插入、查找、销毁等操作的具体实现。文章目录1.为什么需要双链表?1.1双链表的概念1.2双链表一个结点的内容2.双链表的项目实现2.1 双链表的定义代码实现思考下为何使用typedef?2.2 双链表的创建代码实现2.3 双链表的初始化代码实现2.4 双链表的判空操作代码实现2.5 双链表的元素数量查询操作代码实现2.6 双链表的打印操作代码实现2.7 双链表的尾插实现思路:代码实现2原创 2021-08-17 19:47:48 · 1928 阅读 · 39 评论 -
【数据结构】 单链表的简单理解和基本操作
前言:本章主要内容是数据结构中的单链表。文章目录1.为什么需要链表?1.1顺序表的缺陷1.2链表逻辑结构如下:1.3物理结构如下:1.4顺序表和单链表物理结构的对比:2.单链表的代码实现2.1 定义单链表思考下为何使用typedef?2.2 单链表的空间开辟2.3 单链表的尾插实现思路:错误程序:上述尾插代码有错误,思考下哪里出现bug?修改后程序2.4单链表的头插2.5单链表的数据打印2.6 单链表的尾删2.7 单链表的头删2.8 单链表的长度查找2.9 单链表的判空操作2.10 单链表的值查找操作原创 2021-08-14 21:30:16 · 3344 阅读 · 43 评论 -
【数据结构】 顺序表的简单理解和基本操作
前言:本章介绍的主要内容是顺序表文章目录1.线性表2.顺序表2.1 概念及结构2.2顺序表分类3.动态顺序表项目创建3.1 定义顺序表思考下为何使用typedef?3.2 顺序表的初始化思考这样进行初始化可行否?修改后的正确初始化:3.3 顺序表的打印3.4 顺序表的增容3.5 顺序表的尾插3.6 顺序表的头插3.7 顺序表的尾删3.8 顺序表的头删3.9 顺序表的查找操作3.10 顺序表的插入操作3.11 顺序表的删除操作3.12 顺序表的元素数量查看操作3.13 顺序表某个元素的修改操作3.14 顺原创 2021-08-11 23:50:03 · 2051 阅读 · 39 评论 -
LeetCode刷题——双指针移除数组元素
前言:本章主要介绍双指针移除数组中特定元素的解题方式。文章目录1.原地移除数组中所有的元素val问题描述:双指针思路:绘图演示:示例程序:2.删除排序数组中的重复项问题描述:双指针思路:绘图演示:示例程序:1.原地移除数组中所有的元素val问题描述:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元原创 2021-07-30 21:52:16 · 557 阅读 · 14 评论 -
LeetCode刷题——数组中数字出现次数
文章目录前言:刷题前先提一下类似Leetcode和牛客网这类在线OJ的两种类型:接口型和IO型。正文:1.只出现一次的数字思路实现:2.数组中数字出现的次数2.1 找出两个只出现一次的数(其余数字均出现两次)思路实现:2.2 找出一个只出现一次的数(其余数字均出现三次)思路实现:3.消失的数字思路二实现(0~n计算等差数列和-数组中所有值相加)思路三实现(异或)前言:刷题前先提一下类似Leetcode和牛客网这类在线OJ的两种类型:接口型和IO型。接口型:测试用例和结果一般是通过参数接口函数的参数和原创 2021-07-10 13:51:13 · 1394 阅读 · 14 评论 -
【数据结构】 时间复杂度_空间复杂度
文章目录前言1.什么是数据结构?2.什么是算法?正文1.算法效率2.时间复杂度2.1时间复杂度的定义2.2大O渐进表示法(1)可以忽略加法常数(2)与最高次项相乘的常数可忽略(3) 最高次项的指数大的,函数随着 n 的增长,结果也会变得增长得更快(4)判断一个算法的(时间)效率时,函数中常数和其他次要项常常可以忽略,而更应该关注主项(最高阶项)的阶数推导大O阶方法:总结:常见时间复杂度如下:2.3常见时间复杂度计算举例(自己目测下复杂度)实例1 复杂度: O(N)实例2 复杂度:原创 2021-07-05 21:15:36 · 1904 阅读 · 29 评论