数据结构
文章平均质量分 78
数据结构学习
P_M_P
Practice Makes Perfect.
展开
-
【C语言】探索数据结构:单链表和双链表
链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的原创 2024-01-31 13:07:02 · 1028 阅读 · 15 评论 -
【Leetcode】重排链表、旋转链表、反转链表||
链表相关的题目还是要注意细节,结点之间的切割与连接要特别仔细,不然任意造成空结点,或者成环导致死循环。原创 2023-12-27 19:23:23 · 678 阅读 · 36 评论 -
【Leetcode】相同的树、对称二叉树、另一颗树的子树
这个题目实际上可以分解为许多个相同的子问题,就是检查每一个子树是否相同,然后便可以利用递归的思想来解答。原创 2023-12-10 11:48:58 · 689 阅读 · 17 评论 -
约瑟夫问题
约瑟夫问题:编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数,报到 m 的人离开。下一个人继续从 1 开始报数。n-1 轮结束以后,只剩下一个人,问最后留下的这个人编号是多少?将每个成员按照对应的编号放在数组中,然后将数组中每一个元素对应的值都初始化为一个相同的数(比如 0),然后设置一个变量记录离开的人的数量作为循环的条件。原创 2023-12-04 19:56:48 · 1119 阅读 · 2 评论 -
Top-K问题
给定一个长度为 n的无序数组nums,请返回数组中前 k 大的元素。原创 2023-12-05 10:53:27 · 523 阅读 · 8 评论 -
Leetcode:用队列实现栈,用栈实现队列
思路:首先了解到队列的特点是先进先出,栈的特点是先进后出,然后我们可以创建两个队列来模拟栈。入栈时,直接插入非空队列的队尾(第一次入栈时,任意插入一个队列),出栈时,先将非空队列的元素弹出到另一个队列,留下最后一个元素,再弹出,判空时,直接判断两个栈是否都为空。用栈实现队列思路:首先创建两个栈,一个栈用来入队列,一个栈用来出队列,出队列时,如果出队列的栈为空,则将入队列的栈中的元素弹出到出队列的栈再出队列,否则,直接出栈。原创 2023-11-23 19:43:18 · 428 阅读 · 1 评论 -
【Leetcode】移除元素、合并两个有序数组
题目要求将两个数组合并得到的数组放在nums1中,因此,我们可以从后向前比较两个数组元素的大小,将较大的元素依次放在nums1末端。如果从前向后赋值,则可能覆盖原来nums1的元素。:使用双指针法,创建两个变量s1,s2作为数组索引,nums[s1]先遍历数组,将不等于val的值赋给nums[s2],s2再往后走。原创 2023-11-09 21:38:25 · 172 阅读 · 10 评论 -
【数据结构】顺序表
线性表是⼀种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的⼀条直线。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。数据结构反应数据的内部构成,即数据由哪部分构成,以什么方式构成,以及数据元素之间呈现的结构。数据就是我们常见的数值1,2,3.....教务系统里保存的用户信息(姓名,性别,年龄等),网页里肉眼可以看到的信息(文字,图片,视频等),都是数据。顺序表的底层结构是数组,是对数组的封装,实现了常用的增删查改等功能。原创 2023-11-09 21:26:35 · 68 阅读 · 1 评论 -
【数据结构】栈和队列
一种特殊的线性表,其只允许在固定的一端进行插入和删除操作。在进行数据插入和删除的一端称为栈顶,另一端称为栈低。栈中的元素都遵循后进先出的原则(LIFO,Last In First Out)。栈一般可以用数组或者链表来实现,相对而言数组的结构更优一些。因为数组在尾插上更加方便,而栈也只是在栈顶一端进行操作。:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊。栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。栈的删除操作叫做出栈。:进行插入操作的一端称为队尾。:进行删除操作的一端称为队头。原创 2023-11-20 21:01:44 · 123 阅读 · 3 评论 -
LeetCode:随机链表的复制
随机链表的复制原创 2023-11-16 15:51:47 · 286 阅读 · 2 评论 -
Leetcode:相交链表,环形链表,环形链表||
先分别遍历两个链表,得出两个链表的节点个数和两个链表节点数的差,再创建两个指针指向两个链表,让节点数较多的链表的指针先遍历这个差值的节点数,然后两个指针再同时遍历,当两个指针指向的节点的地址相同时,说明两个链表相交,且此节点为交点。先创建两个指针(cur1,cur2)指向头节点来遍历这个链表,其中一个指针每次走一个节点,一个指针每次走两个节点,如果链表中有环,则两个指针一定会相遇,即cur1==cur2。原创 2023-11-15 18:52:43 · 174 阅读 · 0 评论 -
【数据结构】二叉树
这种方法事实上就是使用数组存储每个节点的信息,当树为完全二叉树时,父节点和子节点之间存在一种关系,这个时候使用这种结构比较方便(下面讲到二叉树时会详细说明)。使用这种数据结构去存储树事实上存在一点的问题,只有在知道树的度的情况下使用这种结构才比较合理,另外也不是每个节点的度都是一样的,容易造成空间的浪费。删除堆是删除堆顶的数据,将堆顶的数据根最后一个数据一换,然后删除数组最后一个数据,再进行向下调整算法。若一个节点含有子节点,则这个节点称为其子节点的父节点;一个节点含有的子树的根节点称为该节点的子节点;原创 2023-11-27 15:25:03 · 1045 阅读 · 9 评论 -
【Leetcode】设计循环队列
使用数组来创建队列,另外设置一个下标front和一个小标tail,表示队列的头和尾部,因为是循环队列,所以插入后tail可能会出现在front前面,那么其实它们对应的下标就应该模相应的数来变成循环状态。原创 2023-12-02 21:48:04 · 417 阅读 · 2 评论