
数据结构与算法初阶(C语言)
文章平均质量分 91
计算机科学与技术-欧阳彪
c/c++方向一位努力学习的前行者。目前专栏开设了:《编程tool》分享一些常用编程软件的安装配置和使用。《C语言初阶》《C语言进阶》由浅入深的分享了C语言的知识,《linux》分享关于操作系统的知识,《数据结构与算法》主要分享关于C语言数据结构的知识和学习经验,此外还穿插了人工智能,云计算虚拟技术和算法的相关知识。喜欢和大家交流学习,希望能得到大家的多多指教
展开
-
【数据结构和算法初阶(C语言)】队列实操(概念实现+oj题目栈和队列的双向实现以及循环链表难点题目详解!)
是否需要带哨兵位的链表:哨兵位是为了解决二级指针(可以将头尾指针封装为结构体进行传参,这样就可以改变真实的指针了,所以哨兵位可要可不要),尾插少一次判断。单向还是双向:选择单向,双向的优势是方便找前一个1节点,没有这个需求。那么后续有新数据要进入我们自己的“栈”直接进入有元素的队列尾进就好了,然后一样的办法进行出栈。数组和链表都可以实现队列,但是链表的头插尾插,头删尾删要方便些,所以首选链表。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,出队列:进行删除操作的一端称为。原创 2024-03-16 12:31:56 · 1758 阅读 · 0 评论 -
【数据结构与算法初阶(c语言)】插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序-全梳理(万字详解,干货满满,建议三连收藏)
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。原创 2024-03-31 20:56:25 · 2001 阅读 · 1 评论 -
【数据结构和算法初阶(c语言)】二叉树系列oj题目图文详解
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回true;否则返回false。解题思路:先判断根和它的左右子树相等不相等,都相等再次判断左右子树和他们的孩子是否相等。(递归的思想)先判断根再判断左右子树属于前序遍历。题解代码://如果根为空,这里根据示例1可以返回空//根节点不为空了,现在就来看一下左右孩子的值等不等于根//首先要判断左右孩子有没有,然后再判断两个值是否相等,左子树值与根相等,右子树值与根相等,判定三个节点的值相等。原创 2024-03-27 23:34:51 · 1001 阅读 · 0 评论 -
【数据结构和算法初阶(C语言)】二叉树的链式结构--前、中、后序遍历实现详解,节点数目计算及oj题目详解---二叉树学习日记③
二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。通常的方法是 链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所 在的链结点的存储地址。链式结构又分为二叉链和三叉链。原创 2024-03-25 23:23:50 · 1458 阅读 · 0 评论 -
【数据结构和算法初阶(C语言)】二叉树的顺序结构--堆的实现/堆排序/topk问题详解---二叉树学习日记②12
底层是一个顺序表//底层是一个顺序表,但是数据不是随便存储,逻辑结构是二叉树int size;}HP;//先为i堆空间申请两个节点exit(-1);以上就是本期的所有内容,知识含量蛮多,大家可以配合解释和原码运行理解。原创 2024-03-20 23:57:18 · 1758 阅读 · 0 评论 -
【数据结构和算法初阶(C语言)】二叉树学习日记①--树的概念/二叉树的概念、知识和存储结构
以上就是这篇开启二叉树数据结构的铺垫内容,后续有完全二叉树顺序结构实现--堆结构的详解以及二叉树链式存储实现和应用的详解。本篇文章讲述了树的概念和一些数据特点,以及树的分类,二叉树的一些结构概念和数据特点,是一篇先作铺垫。原创 2024-03-17 11:30:11 · 1241 阅读 · 0 评论 -
【数据结构和算法初阶(C语言)】二叉树铺垫--栈帧的创建与销毁--细节全解
将rbp和rid出栈(这里由于我重新启动了一次所以数据不一样,不过还是可以看到rbp和rsp之间相差20.回到了起点,原先的空间被释放了)刚进入,我们的rbp和rsp在为我们的调用main函数的函数维护栈帧,进入main函数过后。return后,将rbp+E8h给rsp,相当于销毁了add的栈帧。寄存器中有eax/ebx/ecx/ edx /ebp/esp。那么现在的rbp和rsp就维护了main函数维护的这块空间。先将edx的值放到rsp+10的位置。将ecx的值放到rsp+8的位置。原创 2024-03-16 15:31:18 · 864 阅读 · 0 评论 -
【数据结构和算法初阶(C语言)】栈的概念和实现(后进先出---后来者居上的神奇线性结构带来的惊喜体验)
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,出栈:栈的删除操作叫做出栈。栈中的数据后面进的先出,也就是说不能够任意访问,添加和删除数据只能在栈顶进行操作。原创 2024-03-11 21:11:29 · 891 阅读 · 0 评论 -
【数据结构和算法初阶(C语言)】复杂链表(随机指针,随机链表的复制)题目详解+链表顺序表结尾
链表和顺序表的知识到这里基本就告一段落,那么大家可以从知识到解题详细回顾一下。可以结合图解多看一下代码,结合理解。以上就是本期的所有内容,知识含量蛮多,大家可以配合解释和原码运行理解。原创 2024-03-05 18:06:05 · 1230 阅读 · 0 评论 -
【数据结构和算法初阶(C语言)】带环链表问题详解(快慢指针的烧脑应用)
带环链表的题目涉及到数学分析,从解题的过程中我们也能感知到,可以结合图解多看一下代码,结合理解。以上就是本期的所有内容,知识含量蛮多,大家可以配合解释和原码运行理解。t=N7T8t=N7T8. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。原创 2024-03-04 17:58:05 · 1338 阅读 · 0 评论 -
【数据结构和算法初阶(C语言)】双向循环带头链表的增删查改详解(天才设计的链表结构,应用简单逆天!!!!!)
先写一个打印函数来方便后续测试:while (cur!= phead)双向链表是一个快捷使用的数据结构,非常实用,不过对于初学建议画图来理解增删查改。很大程度上增删查改避免了二级指针的传参,就是因为使用了哨兵位的好处。以上就是本期的所有内容,知识含量蛮多,大家可以配合解释和原码运行理解。原创 2024-03-04 14:48:44 · 581 阅读 · 0 评论 -
【数据结构和算法初阶(C语言)】顺序表+单链表经典例题图文详解(题解大合集,搭配图文演示详解,一次吃饱吃好)
1.移除链表元素1.1思路1:遍历删除1. 2 思路2:尾插法2.反转链表3.链表的中间节点3.1解题思想及过程3.2快慢指针思想解题---变式:返回链表的倒数第K个节点4.合并两个有序链表4.1解题思想 1取小的尾插5.反转链表6、CM11链表分割 (比较难)描述7.OR36链表的回文结构8.相交链表9.结语原创 2024-03-02 21:57:05 · 1492 阅读 · 0 评论 -
【数据结构和算法初阶(C语言)】链表-单链表(手撕详讲单链表增删查改)
顺序表知识回顾//数据领域//定义指针领域,方便保存下一个节点的地址}SLNode;为了后期使用方便,我把整型这个类型重新定义了一下,后续如果需要改变我们这个程序中的数据类型,比如换成doubble类型,我们换一下宏定义就好。今天的重点在于理解单链表的增删查改,特别是什么时候需要传输二级指针,什么时候不传。以上就是本期的所有内容,知识含量蛮多,大家可以配合解释和原码运行理解。原创 2024-02-27 20:16:31 · 1770 阅读 · 0 评论 -
【数据结构和算法初阶(C语言)】探究顺序表的私房干货(OJ例题+知识代码双管齐下)
线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的, 线性表在物理上存储时,通常以数组和链式结构的形式存储。 线性表中比较重要的是顺序表和·链表原创 2024-02-26 19:55:38 · 1562 阅读 · 0 评论 -
【数据结构和算法初阶(C语言)】空间复杂度(例题剖析一起探究空间如何评价算法)
空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。形式参数不算。空间复杂度计算规则基本跟实践复杂度类似,也使用大O渐进表示法。注意:函数运行时所需要的栈空间(存储参数、局部变量、一些寄存器信息等)在编译期间已经确定好了,因 此空间复杂度主要通过函数在运行时候显式申请的额外空间来确定。但是如果在运行期间重点:计算时间复杂度的时候时间是可以累加的,但是空间却是可以重复利用的原创 2024-02-25 16:28:33 · 1343 阅读 · 0 评论 -
【数据结构和算法初阶(C语言)】时间复杂度(衡量算法快慢的高端玩家,搭配例题详细剖析)
算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏,一般 是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。大O符号(Big O notation):是用于描述函数渐进行为的数学符号。本质是就是抓主要影响的项就行,当我们的表达式中未知数非常大,比如N=200万亿,那么他的常数倍或者再增加常数,就像对于大海来说,多一碗水少一碗水没有区别,我们只用抓主要因素来大概估算我们算法和程序的时间复杂度就可以。所以:重要:大O的渐进表示法去掉了那些对结果影响不大原创 2024-02-24 16:24:12 · 1613 阅读 · 0 评论 -
【数据结构和算法初阶(c语言)】数据结构前言,初识数据结构(给你一个选择学习数据结构和算法的理由)
算法的学习需要多思考多练,更需要时间的沉淀,希望我们都能逆流而上,一起加油。原创 2024-02-24 11:47:54 · 670 阅读 · 0 评论