数据结构
文章平均质量分 53
Yair_
这个作者很懒,什么都没留下…
展开
-
堆
堆分为大根堆和小根堆。堆的结构是一颗完全二叉树。大根堆是父结点大于孩子结点。小根堆是父结点小于孩子结点。这就是一个小根堆这是一个大根堆。原创 2024-04-17 22:34:15 · 417 阅读 · 1 评论 -
排序
选择排序是寻找数组中的最大值(最小值)的下标,然后交换。当然我们可以优化一下,上面原始做法是找最大值,其实我们可以分区间去找最小和最大,然后把最小值和该区间第一个数交换,最大值和该区间最后一个交换。但是这样写会存在一个问题,就是当maxi的位置和begin的位置相同,mini的问题和end的位置相同,那么就会重复交换,相当于两次交换的同样的位置,那么没有起到交换的作用。原创 2024-04-18 21:23:35 · 372 阅读 · 0 评论 -
二叉树的基础理论
以上只是二叉树的一些基础理论,两种遍历方式,和二叉树结构的代码实现,将会在之后更新。原创 2024-03-19 20:34:59 · 315 阅读 · 1 评论 -
数据结构——栈(用链表实现栈)(C语言)
顺序表和链表实现栈,二者相辅相成,很难说那个更好。先定义链表结构体,在定义栈结构体。原创 2024-02-28 16:39:31 · 214 阅读 · 0 评论 -
数据结构——双向链表(C语言版)(带虚拟头节点)
该链表循环,所以在初始化的时候(只有虚拟头节点这一个节点),这个虚拟头节点的next指向自己,prev也指向自己。在pos位置之前插入,首先pos不能为空(不然不知在哪插入元素),否则报错(使用断言能更快发现错误)。循环链表打印的结束标志不像单向链表(NULL),它的结束标志是不等于虚拟头节点。创建一个元素为x的新节点,并把该节点与pos和pos->prev相连接。链表可以分为三大类:循环与不循环,双向和单向,带头与不带头。上期更新了不循环不带头的单向链表,这期为循环带头的双向链表。原创 2024-02-28 15:18:22 · 151 阅读 · 0 评论 -
数据结构--顺序表(C&&python)
而温柔方式和暴力方式的区别是:当顺序表中元素不足时,温柔方式不会报错,而暴力方式会报错。解释:同样的,在删除之前,判断顺序表中元素是否足够,同样也分为温柔方式和暴力方式,此处省略温柔方式(个人更喜欢暴力处理方式)以上仅是个人(初学者)对与顺序表的初步学习,发布在此,仅是对自己起到一个后期复习和查漏补缺的作用。解释:首先重命名顺序表中元素的类型,这样可以方便管理顺序表中的元素类型,只需将int更改。解释:pos是插入第几个的位置,而不是下标,并且在插入之前判断位置(pos)是否合法。原创 2024-02-01 22:47:27 · 109 阅读 · 1 评论 -
二叉树的前中后序遍历(递归法和迭代法)
三种遍历的递归大差不差,但迭代却有区别,那么在下一期将会更新三种遍历的迭代统一格式。原创 2024-03-20 21:32:29 · 359 阅读 · 1 评论 -
数据结构——栈(顺序表实现栈)(C语言)
若使用链表实现栈,头做栈顶,头插头删,可以设计为单链表。尾做栈顶,尾插尾删,设计为双向链表(否则删除数据效率低)栈好像就是一叠盘子,盘子只能从最上面拿,不可以从中间或者下面。若使用顺序表实现栈,则左边为栈底,右边为栈顶(栈顶出元素)栈可以使用顺序表实现,也可以使用链表实现。栈的重点主要是出栈和入栈。原创 2024-02-28 16:01:27 · 198 阅读 · 0 评论 -
数据结构——树(C语言)
判断该父节点是否为叶子结点(也就是它是否存在子节点),若不存在子节点,则直接把创建好的链表结点(child_node)赋值给该父结点的子结点的头结点(parent->child_head)。若存在子结点,就把该父结点的当前子结点的头结点 修改为创建好的链表结点(child_node) 的下一个结点,然后再把父结点的子结点的头结点更新为创建好的链表结点(child_node)。数据不用多说,子节点链表的头节点:该链表将该结点的下一度子节点都链接起来了。树包含四种节点:父节点,子节点,叶子节点,根节点。原创 2024-03-03 11:01:58 · 505 阅读 · 0 评论 -
数据结构--单向链表(C&&python)(不含虚拟头结点)
该函数修改了结构体,传递一个指针的地址,用一个二级指针接收。如果是一个一级指针接收一个一级指针,这只是临时拷贝。对该指针修改并不会修改链表。重命名一下,后面定义变量和整体的修改更方便。原创 2024-02-04 01:23:20 · 221 阅读 · 1 评论