数据结构
文章平均质量分 83
Gu Gu Study
宝剑锋从磨砺出,梅花香自苦寒来,想给努力的自己留点痕迹
展开
-
数据结构------栈(Stack)和队列(Queue)
其实我们可以从其功能开始思考,这两者哪个更好去实现栈的功能,而且效率较高,其实说到这里,很多人可能已经有了结果,其实要说简洁与效率数组更适合来做栈。然后我们思考一下队列的功能实现是要数组好还是链表好呢,这么一想是不是马上就发现了,如果们还是用数组来实现的话,那么其出队列的时间复杂度为O(N),那么效率太低了,而链表实现的话则是O(1),显而易队列还是用链表实现较好。需要注意的是记得把原来的tail的next 指向新节点,也要把tail改为 新节点,因为尾插后new就为最后的节点也就是尾了。原创 2024-02-29 21:24:45 · 1567 阅读 · 29 评论 -
一个简短的补充------对链表练习题的补充补充
指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。那么这时我们就可以根据这个结论解决这道题目了。如果链表中有某个节点,可以通过连续跟踪。,返回链表开始入环的第一个节点。来表示链表尾连接到链表中的位置(,仅仅是为了标识链表的实际情况。给定一个链表的头节点。如果链表无环,则返回。,则在该链表中没有环。那么这篇文章就结束了。原创 2024-02-21 23:06:17 · 1157 阅读 · 17 评论 -
力扣(LeetCode)数据结构练习题(2)
这里的题目也是很明了的,让我们返回一个中间节点就行了 ,那么我们要解决的就是如何找到中间节点,很多人想的办法是遍历一遍求出长度,然后又遍历到中间节点返回,但是这样就会增加时间复杂度了。然后我们就可以将代码往后遍历,这时n3的作用就是提前记住原来n2的next,然后令n2=n3,n1=n2,即可完成往后遍历。现在我们来审题,题目很明了让我们反转一个单向链表,那么这里我们就可以简单思考一下思路了,有了思路我们就可以开始尝试一下写代码了。我们这里是将节点里的指针进行反转即可完成链表的反转。原创 2024-02-19 23:55:31 · 1341 阅读 · 19 评论 -
力扣(LeetCode)数据结构练习题
这里我们从题目可知我们要将nums2合并到nums1中,其中nums1的长度为m+n,那么如果我们从nums1的前面开始排序,我们就会因为排序而丢失前面nums1原来的值,所以我们就要从末尾开始排序,所以我们在代码中先定义出三个整形变量end1,end2,end,分别进行运算,进行while循环在两个数组都没比较结束到首元素时我们进行比较后放入nums1的末尾,当有一个nums1的比较元素已经到首元素时,如果nums2的元素还没比较完,那么我们就需要将nums2的元素全排在前面即可。原创 2024-02-12 21:53:31 · 2782 阅读 · 11 评论 -
你真的了解线性表中的顺序表了吗?(静态与动态顺序)
这里格式化我们就把数组中的数据都格式化为0,size也格式化为0,格式化我们可以用循环来进行赋值,但是这里我们就用了一个函数进行赋值。这里我们首先检查有没有空间和空间是否足够,如不够则进行扩容,这里扩容我们用到realloc 函数,函数具体使用方法和头文件详情请看下图。这里我们在创建一个结构体,不同的是,因为我们要实现一个动态的顺序表,所以我们不再创建数组,而设置一个指针来实现动态。总结:静态顺序表的缺点还是很明显的,不能够灵活运用数据的大小是固定的,即。我们尾插55,95,22,然后又尾删掉三个数据。原创 2024-02-11 22:31:30 · 1176 阅读 · 18 评论 -
一篇文章理解时间复杂度和空间复杂度
但在实际情况中,还需要结合具体问题和需求来选择合适的算法。时间复杂度只是一种理论上的度量,实际的运行时间还受到其他因素的影响,如硬件性能、数据结构的选择、算法的实现细节等。其实在计算时间复杂度时我们可以用执行次数的表达式,用大 O渐近表示法,来表示时间复杂度,但随着n的值变大,我们发现其实对次数变化影响最大的是 n*n这一项,时间复杂度的评估是基于算法的最坏情况运行时间,即在最不利的输入情况下的时间复杂度。表示常量时间复杂度,算法的运行时间与问题规模无关,无论输入规模如何变化,算法的执行时间都是固定的。原创 2024-02-08 21:41:26 · 1590 阅读 · 28 评论