![](https://i-blog.csdnimg.cn/direct/bfe0fa2857ca4427ac67679172b9a113.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
【C语言】数据结构
文章平均质量分 95
数据结构
努力学习的小廉
她可以不物质,但你不能没本事
--------励志称为程序猿的早八男大
展开
-
【数据结构】--- 栈和队列
前面学习了数据结构的顺序表、单链表、双向循环链表这些结构;现在就来学习栈和队列,这里可以简单的说栈和队列是具有特殊化的线性表。原创 2024-07-18 20:07:27 · 533 阅读 · 15 评论 -
【链表】算法题(二) ----- 力扣/牛客
遍历链表,fast每次向前走两步,slow每次向前走一步,如果链表存在环,fast与slow指针一定会相遇;再定义两个指针从相遇节点和链表头结点开始遍历,两个指针相遇时的节点就是链表环的起始节点。先在原链表的基础上创建节点,形成新的链表,再给链表节点的random指针赋值,最后断开新链表和原链表的连接即可。找到链表的中间节点,然后逆置链表的后半部分,再一一遍历链表的前半部分和后半部分,判断是是否为回文结构。判断两个链表是否相交,如果相交就返回相交节点,如果链表不相交,那就返回NULL;原创 2024-07-16 18:04:08 · 706 阅读 · 29 评论 -
【链表】算法题(一) ----- 力扣 / 牛客
看到这个题,本人一开始的想法是:遍历一遍链表,记录链表的节点个数,然后再遍历一次链表,寻找链表的中间节点;合并两个有序链表,这里创建一个新的链表,将两个链表中较小小的数据依次尾插到新链表中,最后返回新链表的头节点即可。题目上这样说,我们就可以创建一个新的链表,将值不为val的节点,尾插到新的链表当中,最后返回新链表的头节点。到这里,l2已经遍历到了NULL,循环结束,此时l1指向的就是反转后链表的头节点,直接返回即可。循环到这里,fast为空,循环结束,此时slow指向的节点就是链表的中间节点。原创 2024-07-14 21:53:27 · 1091 阅读 · 18 评论 -
【顺序表】算法题 --- 力扣
这个题让我们移除数组nums中值为val的元素,最后返回k(不是val的元素个数)这样显然我们就不能再创建一个数组来解决这个问题了,只能另辟蹊径思路:双指针这里定义两个指针(l1,l2)(l1,l2是整数,通过下标访问数组元素)都指向数组的起始位置,然后循环判断l1指向的元素是否等于val?如果等于,就让l2++;如果不等于,那就将l2的值赋给l1指向的元素,然后l1++,l2++。这样遍历完数组后,l1的值就是不等于val的元素的个数。原创 2024-07-12 21:22:38 · 873 阅读 · 6 评论 -
【数据结构与算法基础】算法复杂度
算法就是定义良好的计算过程,它取一个活一组的值输入,并产生出一个或一组值作为输出。简单来说,算法就是一系列的计算步骤,用来将输入数据转化成输出结果。原创 2024-07-10 11:15:36 · 830 阅读 · 2 评论 -
【数据结构】--- 双向链表详细理解和实现
双向链表是一种带头双向循环的链表。在双向链表中,首先存在着一个头结点;其次每个节点有指向下一个节点的指针next 和指向上一个节点的指针prev;最后,双向链表的头结点中存放上一个节点的指针指向链表的尾节点,尾节点中存放下一个节点的指针指向链表的头结点,形成一个闭环。这样双向链表既可以从前遍历,也可以从后遍历,直到回到起点。一、链表的分类链表的结构多种多样,链表呢可以是带头(不带头)、双向(单向)、循环(不循环)的,我们之前实现的单链表其实就是不带头,单向,不循环的链表。而这些有什么区别呢?原创 2024-07-08 11:04:55 · 1186 阅读 · 5 评论 -
【数据结构】--- 单链表实现
链表和顺序表都是线性表的一种,但是顺序表在物理结构和逻辑结构上都是连续的,但链表在逻辑结构上是连续的,而在物理结构上不一定连续;来看以下图片来认识链表与顺序表的差别这里以动态顺序表为例,和链表中的单链表对比一下动态顺序表单链表这里就可以很清晰的看到顺序表的底层其实就是一个数组,数据的是连续存储的(顺序表物理结构连续);而链表它每一个数据都不是连续的(链表物理结构上不一定连续)。链表节点通过观察上图,我们会发现链表每一个节点都存放在数据和下一个节点的地址。原创 2024-07-05 18:14:21 · 1733 阅读 · 10 评论 -
顺序表实现--通讯录
不过这里需要注意的时:我们是基于顺序表来实现通讯录,我们需要通讯录的头文件,也需要用到顺序表的相关代码,两个头文件在使用时都会用到另一个头文件的东西,而头文件又不能相互包含,(这里在通讯录头文件Contact.h中只需声明顺序表结构体就可以了(不可以直接使用重命名后的结构体名)),顺序表实现的头文件直接包含Contact.h即可(因为会涉及到数据类型重命名和插入、查找数据等)。中,实现顺序表时,存储的是整形数据,那现在需要将用户信息存储起来,我们就让顺序表存储的数据是我们结构体(联系人信息)。原创 2024-07-02 16:30:52 · 1079 阅读 · 7 评论 -
【数据结构】--- 顺序表
当我们想要使⽤大量使⽤同⼀类型的数据时,通过⼿动定义⼤量的独立的变量对于程序来说,可读性非常差,我们可以借助数组这样的数据结构将⼤量的数据组织在⼀起,结构也可以理解为组织数据的方式。在使用完顺序表后,就要销毁顺序表,因为动态顺序表内存是动态开辟的,所以需要对动态内存进行释放,并将有效数据和空间容量个数置为0;到这里,顺序表的知识就完成了,学完这些,我们也要写顺序表的实践,就是通讯录——在下一篇进行实现。求数组的长度,求数组的有效数据个数,向下标为数据有效个数的位置插入数据(注意:这里是。原创 2024-06-30 22:11:50 · 5216 阅读 · 17 评论