
数据结构
文章平均质量分 70
@A云淡风轻
越努力越幸运
展开
-
用C语言实现队列的基本操作
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)入队列:进行插入操作的一段称为队尾出队列:进行删除操作的一段称为对头队列的实现由于队列要实现队尾入数据,队头出数据,所以我们可以用两个指针来指向队头和队尾,方便队列的尾插和头删。3.队列的初始化4.队列的销毁5.入队即单链表的尾插6.出队即单链表的头删7.取队头的值8.取队尾的值9.判断队列是否为空10.队列的大小11.队列的应原创 2022-07-05 19:32:31 · 4759 阅读 · 0 评论 -
Leetcode题解:20.有效的括号(C语言版)
20.有效的括号Leetcode链接:20.有效的括号给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。看到这题大家有啥想法吗?我们可以这样操作:用一个栈来实现,首先如果是左边的括号,我们让它们都入栈,如果是右边的括号,我们可以取栈顶的元素与其进行匹配,如果正确就s++,判断下一个,一直到最后,如果最后栈为空,说明右边的括号与左边都匹配,则return true。具体原创 2022-07-05 00:19:55 · 444 阅读 · 0 评论 -
C语言实现 栈的基本操作(结构体定义、初始化、销毁、入栈、出栈、判空等等)
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的元素遵循**后进先出LIFO(Last in First Out)**的原则。压栈:栈的插入操作叫做进栈/压栈/入栈。入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据在栈顶。接下来让我们实现一个栈,首先我们需要想,栈的实现用数组好还是链表好呢?答案是数组较好一些。由于栈的操作只在栈顶进行,对于尾插尾删等,数组的效率更好一些,链表的尾插尾删要找尾和尾的前一个,效率较低,如果原创 2022-07-04 22:16:33 · 2270 阅读 · 0 评论 -
顺序表和链表的区别和与程序员相关的CPU缓存知识
顺序表和链表的区别(这里的链表主要指的是带头双向循环链表)顺序表优点:下标随机访问、cpu高速缓存命中率高顺序表缺点:头部或者中间插入删除效率低、扩容(有一定的性能消耗、可能存在一定程度空间浪费)链表优点:在任意位置插入删除O(1),按需申请释放链表缺点:不支持下标随机访问所以虽然链表很强大,但它并不能完全代替顺序表,可以说它们二者相辅相成。下面介绍一些与程序员相关的CPU缓存知识因为无论你写什么样的代码都会交给CPU来执行,所以如果你想写出性能比较高的代码,这里提到的技术还是值得认真学习的。基础原创 2022-07-04 17:39:42 · 1952 阅读 · 0 评论 -
超详细-Leetcode题解138.复制带随机指针的链表
生命不息,奋斗不止;保持热爱,奔赴山河。Leetcode链接:复制带随机指针的链表总的代码在文章末。大家看到这题有什么想法吗?题目的意思是让我们完完全全在弄一个一模一样的链表,咋弄?我们可能会想到用一个cur指针从原链表初始位置开始,进行遍历,用copy指针指向一个新链表,将cur的val给copy,但这里的random咋办?怎么找到copy的random,遍历一遍,通过val值找,但要是有两个的val值是一样的咋整?就算val都不一样,但这一个个遍历效率不高,时间复杂度是 O(N*2),这里介绍原创 2022-07-03 23:30:16 · 311 阅读 · 0 评论 -
一文教你彻底掌握数据结构之带头双向循环链表
hello,大家好,我们又见面了,很开心遇到你们,让我们一起努力,冲冲冲👀!实际链表的种类非常多样,以下情况组合起来就有8种情况。单向不带头不循环,它的头插,头删效率较高,它的中部和尾部的插入删除效率较低,适合作为哈希桶的一个子结构。单链表一般不单独使用,双链表可以单独使用,链表的最优结构:双向带头循环链表,它结构复杂,操作简单。3.链表的初始化由于哨兵位的头结点的data不存储有效数据,所有初始化的时候可以放符合数据类型的任意值,这里我放个-1.它的prev和next都指向其本身。法.原创 2022-07-02 08:10:33 · 159 阅读 · 0 评论 -
一文带你10分钟写一个带头双向循环链表
hello,大家好,我们又见面了,很开心遇到你们,让我们一起努力,冲冲冲👀!不知大家面试遇到面试官让你10分钟写一个链表这样的问题没?你能会觉得面试官在刁难你,其实不然😢。10分钟就写好一个复杂的链表,听起来好像很悬,其实掌握好复用这个技巧,实现它不是梦!**复用:**通过写一个源函数,其他函数直接调用它来实现其功能,往往只需要改函数的调用参数即可!如果您不太了解双向带头循环链表,建议先学一下。双向带头循环链表复用后总的代码:如果对您有所帮助,期待您的点赞和关注呀😍!............原创 2022-06-30 22:13:42 · 137 阅读 · 0 评论 -
LeetCode题解:141.环形链表 142.环形链表 II
怀着兴趣探索编程的世界,如此,美妙✌141.环形链表如何判断链表是否带环呢?可采用快慢指针法。快指针一次走二步,慢指针一次走一步,如果它们最终相遇,说明链表带环,否则不带环。为什么这个可以判断呢?结论:如果链表带环,fast一定可以追上slow。假设slow进环后,fast跟slow的距离是N这时fast真正开始追击slow,fast一次走2步,slow一次走1步,它们之间的距离每次缩小1NN-1N-2…210(追上相遇了)如果快指针一次走3步,慢指针一次走1步,slow进环后,原创 2022-06-30 17:08:22 · 203 阅读 · 0 评论 -
一文教你彻底掌握数据结构之顺序表
今天是五四青年节,首先祝大家节日快乐,青年一代有理想,有担当,国家就有前途,民族就有希望。本节目标1.线性表2.顺序表2.1概念及结构2.2顺序表的初始化2.2顺序表的增容2.3顺序表的打印2.4尾删2.5头删2.6尾插2.7头插1.线性表线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表,链表,栈,队列,字符串…线性表在逻辑上是线性结构,也就是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构形式存原创 2022-05-04 22:58:21 · 413 阅读 · 0 评论 -
一文教你彻底掌握算法的时间复杂度和空间复杂度
光阴易逝,人生无常,把握住你能把握住的点滴。今天让我们一起来学习算法的时间复杂度和空间复杂度ヾ(≧▽≦*)o本节目标一、算法效率二、时间复杂度一、算法效率如何衡量一个算法的好坏?算法的复杂度算法在编写成可执行程序之后,运行时需要消耗时间资源和空间(内存)资源。因此,衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。时间复杂度主要衡量一个算法运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。在计算机发展早期,计算机的存储容量很小,所以对空间复杂度很在乎原创 2022-05-03 16:21:38 · 329 阅读 · 0 评论