数据结构
文章平均质量分 93
数据结构的文章
忘梓.
小白一枚,开始探索代码世界
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
单链表习题——快慢指针类习题详解!(2)
这个题目与循环链表的不同之处在于,这个题目除了快慢指针以外,我们还需要多设置一个指针,这个指针首先要指向头结点,此时我们先不管指针,我们需要先利用快慢指针来判断这个链表是否是带环的,如果不带环,直接返回NULL,如果带环,我们需要记住快慢指针第一次相遇的位置,此时我们直接结束循环,然后此时我们设置的第三个指针开始与慢指针保持同样的速度,然后我们通过循环,循环的条件还不用管,此时我们首先开始判断慢指针和这个指针是否相等,不相等的话直接让他俩同时走,当他们相等的时候,这个时候,第三个指针指向的结点就是入环点!原创 2024-07-31 09:00:00 · 951 阅读 · 1 评论 -
算法复杂度详解( 超详细!)
首先,我们从第一个循环开始看,这个是个循环的嵌套,所以一共进行了N * N次,也就是N ^ 2次,之后我们在看下一个循环,很显然,循环了2 * N次,所以一共有2N次,在看下一个循环,根据题目的意思,所以这里其实循环了10次,所以一共有 N ^ 2 + 2 * N + 10次,可能由于很多读者朋友会疑惑为什么在进行创建变量的时候不算次数,因为这个次数太小,所以可以忽略掉,小编下面就直接忽略这个了!对于上面题目的错误,超出时间限制,涉及到了时间,所以很明显是时间复杂度出现问题了,那么到底出现了什么问题呢?原创 2024-07-11 09:00:00 · 2749 阅读 · 2 评论 -
单链表习题(3)(超详细)
这个题目是最近小编做过的难度系数最大的题目了(可能是我太菜),这个题目我当时看的时候,真的就一点思路也没有,脑子里空空如也,如果只是一个单纯单链表复制的话,那么这个题目难度还没有那么夸张,但是问题就是这个题目的链表,已经不是一个单纯的单链表了,这个链表比起一般的链表,它多了一个random,这是个随机指针,这个题目最大头的部分就是解决这个随机指针的问题,下面小编先来讲述一下,我们首先除去随机指针以外链表的复制,至于随机指针,我们在复制完一次链表以后难度系数就下降了。原创 2024-08-01 09:00:00 · 1067 阅读 · 3 评论 -
数据结构——单链表详解(超详细)(2)
这里我们可以用到我们上面用到的查找函数,因为它是返回的结点,所以我们可以通过它来确定我们想要的指定位置,因为单链表只可以往后一步一步的走,而不能往前找数据,所以我们得先确认我们想要找的位置,下面我们涉及指定位置的时候,都要引用一下查找指定位置这个函数,下面我们来进行这个函数的讲解,这个函数其实也分为两种情况。第一种情况是指定位置就是头结点,此时这就类似于我们之前写过的头插函数,我们直接引用头插函数就可以实现这个功能。第一种情况就是我们想要删除的指定节点就是头结点,此时我们只需要调用一下头删函数就可以实现。原创 2024-07-17 09:00:00 · 797 阅读 · 1 评论 -
顺序表的应用——通讯录的创建
小编在刚刚说出哦,通讯录的实现的底层代码是顺序表,所以我们可以完全通过前文的顺序表的代码,来基于此开展最详细的代码书写,不过此时我们要更改一些数据,就比如前文我们讲过的顺序表的变量都是整型,这次要改成结构体类型了(通讯表的类型),此时就要展现小编前文写过的对于typedef的妙用了,这个时候我们直接把整型改成通讯录的结构体类型就好了,这里就展示了此代码的灵活性,不过我们想要运用通讯录的时候,一定要记得包含通讯录的头文件,不然会报错的。这便是通讯录所包含的内容。原创 2024-07-02 09:00:00 · 895 阅读 · 1 评论 -
数据结构——队列的讲解(超详细)
我们在之前刚讲述完对于栈的讲解,下面我们在讲另一个类似栈的数据结构——队列,它们都是线性表,但结构是大有不同,下面我们直接进入讲解!原创 2024-08-15 09:05:41 · 3039 阅读 · 1 评论 -
单链表相关习题(超详细!)(1)
小编的方法是创造一个新的单链表,这个链表用来作为最后一个大的链表,首先,我们需要在创建两个指针,分别来来表示两个链表的头结点(pour1,pour2),之后我们需要进行二个结点数据的比较,如果第一个链表的结点小于等于第二个链表的结点,那么讲第一个链表的数据放入到新链表中,如果新链表是空的话,直接头结点给第一个链表,否则新链表当前结点下一个结点就是第一个链表的结点,然后让第一个链表往后走,新链表往后走,第二个链表不动;所以我们首先要把新链表最后一个节点的下一个指针指向空,这个时候我们就可以返回头结点了!原创 2024-07-18 09:00:00 · 823 阅读 · 3 评论 -
数据结构——栈的讲解(超详细)
小编也是完成了对于栈的讲解,总体来说,栈这个数据结构小编自己认为是不算太难的(关于栈的习题不算),本篇文章算是小编最近写的最短的一篇了,希望读者朋友可以去好好的了解,如果文章有什么错误的地方,请在评论区指出,小编一定及时更正,那么我们下篇文章见啦!原创 2024-08-10 09:00:00 · 5876 阅读 · 6 评论 -
数据结构——单链表详解(超详细)(1)
简单的插入函数就先告一段落了,下面我们来进行删除操作,首先登场的就是尾删,尾删操作,与顺序表的尾删一个概念,就是把单链表的尾结点置为空,首先,我们需要保证头节点是存在的,不然单链表都是空的,我们删来删去也没什么意思了,这里可以用assert断言来判断下头节点是否为空,之后我们就可以进行删除操作·。此外,对于单链表代码的书写,小编同样是分成了三个文件,与顺序表一样,这三个文件分别是头文件(用于单链表的创建,各种函数的声明),源文件(函数的实现),源文件(代码的测试),原创 2024-07-16 09:00:00 · 1527 阅读 · 3 评论 -
打开数据结构的大门——顺序表详解
其实这俩的区别是显而易见的,一个是一个定长的数组,一个是动态的数组,静态顺序表最大的缺点其实就是这个定长,假设我们想要存放一个100个元素的数组,但是此时静态顺序表中数组里面仅仅可以存放99个元素,那么这个时候我们又得大费周章的把数组元素个数增大,这样会显得很麻烦,可读性很差,但是此时对于动态的数组可就不是问题了,只要进行相应的扩容,就可以解决这个问题了,所以通过比较来看静态顺序表的局限性太大了,动态顺序表就灵活了很多,所以之后小编更推荐大家用动态顺序表来进行代码的书写。原创 2024-06-29 09:00:00 · 852 阅读 · 0 评论 -
数据结构——双链表详解(超详细)
哨兵位这个名字看起来是很威武的,其实了解它之后就知道它仅仅就是名字威武点,它才是真正意义上的头结点,哨兵位是不存数据的,它的存在仅仅就是为了说明这个链表是带头的,是用来“放哨的”,小编在讲述单链表的时候曾多次提到了头结点这个名字,那个时候头结点是链表第一个结点,这个叫法是不太规范的,不过为了让读者朋友更好的去理解链表的知识,小编于是就直接头结点来代替链表第一个结点了,不过各位读者朋友一定要清楚。下面紧跟小编的步伐,开启今天的双链表之旅!原创 2024-08-05 09:00:00 · 1604 阅读 · 3 评论 -
轮转数组(超详细!)
其实,我们开辟这个新数组的作用,是把它当作中间商的,它是来存放我们数组进行轮换之后的数的,之后我们可以把轮转完后的新数组的内容在给予我们本来的数组,这样我们就可以减少时间复杂度了!对于轮转数组,第二种解法思路就是通过空间复杂度来代替时间复杂度的思想来进行撰写,此时这个代码主要看空间复杂度从而忽略时间复杂度,这里小编先透露一下,此时的空间复杂度是O(1) ,下面小编将会解释这个代码如何进行撰写!答案是肯定的,下面小编先来通过例子的方式,来给各位读者朋友来解释一下,我们如何通过逆置来进行轮转操作的。原创 2024-07-12 09:00:00 · 1465 阅读 · 5 评论
分享