数据结构与算法
文章平均质量分 92
深入记录自己学习数据结构与算法的过程
zzhzao
计算机是人发明,别人能行我也行。通过博客来记录自己的学习历程,励志成为C++大神!!!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构之排序
希尔排序法的基本思想是:先选定⼀个整数(通常是gap=n/3+1),把待排序⽂件所有记录分成各组,所有的距离相等的记录分在同⼀组内,并对每⼀组内的记录进⾏排序,然后gap=gap/3+1得到下⼀个整数,再将数组分成各组,进⾏插⼊排序,当gap=1时,就相当于直接插⼊排序。直接插⼊排序是⼀种简单的插⼊排序法,其基本思想是:把待排序的记录按其关键码值的⼤⼩逐个插⼊到⼀个已经排好序的有序序列中,直到所有的记录插⼊完为⽌,得到⼀个新的有序序列。遍历完之后,将最小的数据换到最前,最大的换到最后。原创 2025-04-25 07:48:45 · 1862 阅读 · 19 评论 -
二叉树OJ题目
总体上看,二叉树题目方面运用到达递归的情况较多。所以在做题目之前,可以将函数递归部分先行复习。原创 2025-04-23 12:08:12 · 1189 阅读 · 16 评论 -
二叉树操作与遍历实现
本文通过代码详细介绍了二叉树的创建、遍历、销毁以及一些其他操作的实现。二叉树是一种非常重要的数据结构,在计算机科学中有广泛的应用,如表达式树、决策树等。掌握二叉树的操作对于学习数据结构和算法非常重要。原创 2025-04-21 21:17:37 · 1521 阅读 · 22 评论 -
堆的实现以及利用堆进行排序
堆是一种特殊的完全二叉树,分为最大堆和最小堆。在最小堆中,父节点的值总是小于或等于其子节点的值。这种特性使得堆的根节点始终是所有节点中的最小值,非常适合实现优先队列。堆中某个结点的值总是不⼤于或不⼩于其⽗结点的值;堆总是⼀棵完全⼆叉树。⼆叉树性质对于具有 n 个结点的完全⼆叉树,如果按照从上⾄下从左⾄右的数组顺序对所有结点从0 开始编号,则对于序号为 i 的结点有:若 i>0 , i 位置结点的双亲序号: (i-1)/2;i=0 , i 为根结点编号,⽆双亲结点。原创 2025-04-18 11:27:55 · 1615 阅读 · 13 评论 -
循环队列的实现
通过上述代码,我们实现了一个功能完整的循环队列。循环队列通过将队列的尾部和头部连接起来,解决了普通队列的空间浪费问题,同时也保持了队列的基本操作特性。在实际应用中,循环队列可以用于任务调度、缓冲区管理等场景。原创 2025-04-17 16:05:08 · 1503 阅读 · 8 评论 -
栈实现队列
通过上述代码,我们成功地用栈实现了队列的基本操作。这种实现方式巧妙地利用了栈的后进先出特性,通过两个栈的配合来模拟队列的先进先出行为。原创 2025-04-16 08:06:49 · 981 阅读 · 5 评论 -
用队列实现栈
cint data;}queuenode;}queue;这里定义了两个结构体。queuenode 结构体用于表示队列中的节点,每个节点包含一个 data 成员用于存储数据,以及一个 next 指针用于指向下一个节点。queue 结构体则表示整个队列,包含两个指针 phead 和 ptail,分别指向队列的头部和尾部。c} MyStack;这里定义了一个 MyStack 结构体,用于表示用队列实现的栈。它包含两个队列指针 q1 和 q2,通过这两个队列来模拟栈的操作。原创 2025-04-14 22:18:53 · 1459 阅读 · 12 评论 -
括号匹配问题--栈
栈作为一种后进先出(LIFO, Last In First Out)的数据结构,在许多场景中都有着广泛的应用。在括号匹配验证这个问题中,栈的特性恰好能够满足我们的需求。通过将左括号压入栈中,当遇到右括号时从栈中弹出相应的左括号进行匹配,能够有效地判断括号是否正确配对。原创 2025-04-09 12:48:27 · 1148 阅读 · 14 评论 -
数据结构之队列
队列是一种简单而强大的数据结构,广泛应用于各种计算机系统和应用程序中。通过基于链表的实现,我们可以方便地实现队列的基本操作,如入队、出队、获取队列头部和尾部元素、获取队列大小以及销毁队列等。队列的先进先出特性使其在任务调度、事件处理和数据缓冲等场景中发挥着重要作用。掌握队列的实现和应用,对于理解和设计高效的计算机系统和应用程序具有重要意义。原创 2025-04-02 11:49:46 · 1443 阅读 · 10 评论 -
让我挠头的计算机难题(链表带环)
在解决环形链表的问题中,百分之九十的题目要用到快慢指针之一思维;原创 2025-03-30 09:39:11 · 1218 阅读 · 8 评论 -
让我挠头的计算机难题(链表进阶)
整体思路,找出链表A的后半部分链表,将其反转,之后遍历链表,将反转后的链表元素与原链表的前半部分的元素一一比较。但大多数情况下是不尽人意的,因为两链表长度的不同,造成了比较时的困难,如若要暴力解题,时间复杂度也会达到n的平方的量级,所以在这里,要使用别的思路;在遍历完大链表之后,要将大链表的尾节点置为空指针,因为大链表的最后尾节点指向的可能是原链表中的一个节点,会使得链表陷入循环。计算两个链表长度的差值 gap,将较长链表的指针向前移动 gap 步,这样两个链表的剩余长度相同。原创 2025-03-29 15:42:21 · 1401 阅读 · 8 评论 -
数据结构之双向链表
双向循环链表是一种特殊的链表结构,它由一系列节点组成,每个节点包含三个部分:数据域:存储实际数据。前驱指针:指向当前节点的前一个节点。后继指针:指向当前节点的后一个节点。与普通链表不同的是,双向循环链表的最后一个节点的后继指针指向头节点,而头节点的前驱指针指向最后一个节点,从而形成了一个闭环。这种结构使得从任意一个节点出发,都可以方便地向前或向后遍历链表。原创 2025-03-27 15:45:38 · 556 阅读 · 4 评论 -
让我挠头的计算机难题(单链表的增删查改)
若 newhead 不为 NULL,表明新链表已有节点,把 pcur 接到新链表尾部,即 newtail->next = pcur,然后更新尾节点 newtail = newtail->next。要注意的是判断循环的条件 fast 与 fast->next 的位置不能互换,原因是若fast为空时,若fast->next在前,则会造成对空指针的解引用。快慢指针是一种非常实用高效的解题方法,慢指针一次移动一步,快指针一次移动两步,当快指针走到结尾时,由于速度是慢指针的两倍,所以慢指针此时在链表的中部节点。原创 2025-03-25 15:21:03 · 1059 阅读 · 6 评论 -
让我挠头的计算机难题(操作数组)
*dst 时,意味着当前 src 指向的元素与 dst 指向的元素不同,是一个新的不重复元素。= val 时,说明当前元素不是要移除的元素,将 *src 的值赋给 *dst,然后 dst 指针向后移动一位,同时 count 加 1,记录非 val 元素的数量。如果 nums2[l2] > nums1[l1],则将 nums2[l2] 放到 nums1[l3] 的位置,然后 l2 和 l3 指针都向前移动一位。:dst 指针用于指向存储不重复元素的位置,初始时指向数组的第一个元素。原创 2025-03-24 15:08:42 · 1190 阅读 · 6 评论 -
数据结构之双向链表
双向链表是一种非常强大的数据结构,它通过增加反向链接,极大地提升了操作的灵活性和效率。虽然它比单链表占用更多空间,但在需要频繁插入、删除或双向遍历的场景中,双向链表无疑是更好的选择。原创 2025-03-18 09:32:05 · 804 阅读 · 2 评论 -
数据结构之栈
栈是一种线性数据结构,它按照 “先进后出”(First In Last Out,FILO)的原则存储和操作数据。这意味着最后插入栈中的元素会最先被取出,就像一摞盘子,最后放上去的盘子会最先被拿走。原创 2025-03-17 20:16:26 · 1588 阅读 · 10 评论 -
数据结构之单链表
为方便后续修改链表数据的便利性,将int更名。原创 2025-03-10 13:50:33 · 1189 阅读 · 0 评论 -
数据结构--顺序表
顺序表是线性表的一种存储结构,用一组地址连续的存储单元依次存储线性表的数据元素。它把逻辑上相邻的数据元素存储在物理位置上也相邻的存储单元中,元素之间的逻辑关系由存储单元的邻接关系来体现。原创 2025-03-07 23:47:21 · 923 阅读 · 11 评论
分享