数据结构
文章平均质量分 79
袁百万
向梦想进发。热爱编程,永不放弃!
展开
-
使用红黑树封装map和set
我们通过去看源码,我们能发现无论是set还是map使用的是同一颗红黑树。并且set中key_type和value_type中其实使用的都是key,然而map中key_type是key,value_type却是pair。也就是通过传过去的value_type来区分我们用的是map还是set。由于为了区分value与pair我们吧pair在模板中用T来表示。原创 2023-04-09 09:05:23 · 501 阅读 · 6 评论 -
数据结构——红黑树
/给出枚举变量,以便于方便区分红黑结点RED,BLACK,:_kv(kv){}这里待插入结点的默认颜色给的也有说法,如果你插入的是一个黑色结点,百分之百会违反性质4,但是如果我们插入的是红结点则可能违反性质3。所以我们把结点的默认颜色给为红色,以便于我们做更少的调整。原创 2023-04-04 07:51:26 · 759 阅读 · 8 评论 -
数据结构——AVL树
我们不同于普通的二叉搜索树的是,我们的AVL树的结点需要多一个父指针指向自己的父节点,还有一个记录平衡因子的变量,构成了特殊的三叉链结构。因为我们要保持AVL树的左右子树高度差的绝对值不超过1,所以要对树的结构进行旋转。所以通过看平衡因子的值就能知道是否左右子树高度不超过1。//需要存储的键值对//特殊的三叉链结构int _bf;//平衡因子(balance factor)//构造函数:_kv(kv), _bf(0){}关于AVL树,我们只是做一个了解。原创 2023-04-02 17:14:14 · 370 阅读 · 0 评论 -
数据结构——二叉搜索树
遍历数组中的水果,当遇到相同的水果时只在结点的value上进行++操作,以至于来计算每个水果出现的次数,最后中序遍历输出。将minright的值赋给cur然后直接使cur的右结点变为minright的右结点。1、若删除的是根节点,那么直接让根结点指向原根结点的右子树。1、若删除的是根节点,那么直接让根结点指向原根结点的左子树。2、若删除的不是根节点,那么将它的子树托孤给它的父节点。2、 若所需要删除的结点的右结点不是其右子树的最左结点。1、若所需要删除的结点的右结点是其右子树的最左结点。原创 2023-03-30 16:59:03 · 6587 阅读 · 4 评论 -
八大排序(带动图图解与静态图图解)
一、插入排序具体思想:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。就比如我们玩的扑克牌用的最多的排序方式就是插入排序的思想。直接插入排序具体思想:当我们需要插入一个数据时,前边的其他数据已经有序,那么就拿着这个数据从最后一个进行比较,然后插入到合适的位置上。图解:代码实现://直接插入排序void InsertSort(int* a, int n){ int end = 0, x .原创 2022-05-12 23:42:37 · 605 阅读 · 5 评论 -
一集斗罗大陆的时间——教你如何应对 二叉树经典oj题
目录二叉树遍历另一颗树的子树对称二叉树单值二叉树二叉树的最大深度翻转二叉树相同的树二叉树遍历二叉树遍历_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/4b91205483694f449f94c179883c1fef?tpId=60&&tqId=2948..原创 2022-04-30 16:56:19 · 1310 阅读 · 9 评论 -
二叉树——链式结构的代码实现(包含前中后遍历的实现)
目录二叉树的创建构建一颗二叉树二叉树的销毁创建一个新结点计算二叉树的结点个数计算二叉树的叶子结点个数计算二叉树第k层节点的个数二叉树查找值为x的节点二叉树前序遍历二叉树中序遍历二叉树的后序遍历二叉树的层序遍历判断二叉树是否是完全二叉树二叉树的创建根据二叉树的结构,我们用链表来链接每个结点的左右孩子,并且给每个结点定义一个数值。如图所示:代码如下:typedef char BTDataType;//老样子 便于控制数据类型..原创 2022-04-30 15:50:00 · 2053 阅读 · 13 评论 -
二叉树 堆与堆排序的实现(附有TOP-K问题)
目录二叉树概念及结构满二叉树与完全二叉树二叉树的性质堆的概念及结构堆的实现堆的创建堆的销毁交换函数堆的打印堆的插入向上调整算法堆的删除向上调整算法详解图:向下调整算法向下调整算法详解图:获取堆顶元素获取堆的数据个数堆的判空完整代码Heap.hHeap.ctest.cTopK问题堆排序具体思想:堆排序详解图:二叉树概念及结构形如下图结构的被称为二叉树。二叉树特点:1、...原创 2022-04-27 01:22:02 · 520 阅读 · 17 评论 -
LeetCode经典栈与队列面试题——《循环队列》、《有效的括号》、《用栈实现队列》、《用队列实现栈》
LeetCode经典栈与队列面试题——《循环队列》、《有效的括号》、《用栈实现队列》、《用队列实现栈》原创 2022-04-21 20:23:27 · 403 阅读 · 22 评论 -
室友一把王者的时间——偷偷学会栈与队列
室友一把王者的时间——偷偷学会栈与队列原创 2022-04-21 14:09:48 · 3614 阅读 · 18 评论 -
室友一把LOL的时间学会最优链表之——(双向带头循环链表)
室友一把LOL的时间学会最优链表之——(双向带头循环链表)原创 2022-04-14 01:19:22 · 960 阅读 · 16 评论 -
LeetCode经典链表OJ题<二>
目录一、链表的回文结构二、相交链表三、环形链表四、复制带随机指针的链表一、链表的回文结构题目介绍:题目链接 :链表的回文结构_牛客题霸_牛客网 (nowcoder.com)此题目看起来有点儿难度,但是如果你学习了《返回链表的中间结点》和《反转链表》后,你会如鱼得水。只要灵活运用前边两个知识点,这道题很轻松就解决了。 首先我们运用返回链表的中间结点找到此链表的中间结点,然后让此结点后面的所有结点包括此结点进行反转链表从而得到一个链表,另一个链表是中间...原创 2022-04-14 00:25:56 · 921 阅读 · 18 评论 -
牛客网经典链表OJ题 《链表分割》
题目介绍:题目链接:链表分割_牛客题霸_牛客网 (nowcoder.com)我们的思想是创建两个带头的链表l1和l2,遍历题目中所给的链表中各个节点的val将小于x的放入l1中,大于x的放入l2中,然后让l1的尾部指向l2的首部,返回l1的头指针。图解如下:代码如下:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {}..原创 2022-04-12 23:34:55 · 665 阅读 · 7 评论 -
链表相关OJ题 (一)
反转链表 合并有序链表 链表的中间结点 链表中倒是第k个结点 OJ题目原创 2022-04-11 00:54:18 · 614 阅读 · 9 评论 -
顺序表的简单实现
简介虽说名叫顺序表,但其中的内容跟上篇的通讯录如出一辙,只不过略有不同的是这个顺序表定义的函数名遵循STL,而且只传入了整型的数据并没有像通讯录中的字符型那种。1、定义一个SeqList结构体结构体中需要存放的是指针a 当前有效数据size 容量 capacity代码如下:typedef int SLDateType;//这样可以简单的控制存入数据的类型//定义一个SeqList 结构体 来存放 a size capacity 变量typedef struct SeqList{原创 2022-03-30 17:45:25 · 2578 阅读 · 0 评论 -
简易通讯录
简易通讯录今天,我们来写一手通讯录。首先我们既然要写一个通讯录,最起码这个通讯录能实现一些简易的功能。比如:增加联系人,删除联系人,查找联系人,修改联系人等等。其中也运用了一些简单的结构体知识以及简单的C语言知识。当我们想创建一个通讯录的时候,一个界面肯定是少不了的。因此,我们首先搞一手界面。代码如下:void menu()//界面{ printf("******************************\n"); printf("****** 1.add 2.d原创 2021-11-14 19:34:23 · 1465 阅读 · 2 评论 -
C语言实现通讯录的实现(能动态增加内存)
通讯录大家都知道吧,简单的说就是记录一些人的姓名、性别、年龄、地址等信息。今天我们来用C语言来简单的实现一下通讯录,在这期间运用了指针、函数、malloc等动态开辟空间的库函数等等知识。1、通讯录的目录我们要写一个函数来打印一下通讯录的目录,方便用户实现对应功能!代码如下:void menu(){ printf("**********************************************\n"); printf("******* 1.add原创 2022-03-28 23:29:45 · 2923 阅读 · 0 评论 -
单链表的简单实现
链表的增删查改原创 2022-04-10 16:37:26 · 1106 阅读 · 5 评论