
初级数据结构
文章平均质量分 92
本人在学习数据结构时的一些笔记
魔术师的徒弟
The misery
展开
-
外排序——归并思想的实现
本文全部代码已上传Gitee。 之前我们介绍的排序算法都是一种“内排序”的算法,也就是把数据搞到内存中排序,但是如果数据量太大,无法一次性弄到内存中怎么办呢?这种情况下的排序称为外排序。 我们这里可以借助归并的思想进行外排序,首先,我们把这个超大的数据分成N份,使得每份文件单独都可以读到内存中来。 然后我们在内存中对读进来的数据(通常放在一个数组中,数据过大,建议使用malloc在堆上分配内存),使用一个性能不错的排序(如快速排序或堆排序,这里不能用归并排序,因为归并排序需要额外的空间,数原创 2021-11-29 23:21:03 · 1248 阅读 · 2 评论 -
八大排序的思想讲解与排序算法可视化
文章目录一、插入排序1.直接插入排序2.希尔排序3.对比希尔排序和直接插入排序的速度4.希尔排序时间复杂度分析二、选择排序1.直接选择排序2.堆排序三、交换排序1.冒泡排序2.横向对比冒泡排序和直接选择排序和直接插入排序3.快速排序单趟排序的目标单趟排序之hoare版本单趟排序之挖坑法单趟排序之前后指针法多趟排序递归写法递归写法的快排两个缺陷快排无法解决的缺陷小区间优化快速排序非递归实现(栈模拟)四、归并排序1 基本思想2一、插入排序1.直接插入排序 核心思想: 把一个数插入一个有序区间。原创 2021-11-19 18:10:27 · 1818 阅读 · 5 评论 -
二叉树入门OJ—递归思想练习
文章目录一、求二叉树的节点个数二、二叉树的前序 中序 后序遍历OJ三、二叉树叶子结点的个数四、二叉树第K层结点个数五、二叉树的最大深度六、二叉树的查找七、单值二叉树八、翻转二叉树九、相同的树十、对称二叉树一、求二叉树的节点个数 第一种思路是加一个计数器,为了保证每次计数器的值在经过一个非空结点后都能++,我们传一个整型变量的指针。void BinaryTreeSize(BTNode* root, int* count){ assert(count); if (root == NULL) r原创 2021-11-10 14:23:17 · 1137 阅读 · 1 评论 -
堆的实现及其应用(TOPK问题和堆排序)
文章目录一、堆的定义二、堆的实现1.堆的存储结构2.堆的初始化、销毁、打印、判空、返回堆顶元素3.堆的插入4.移除堆顶元素5.创建堆的两种算法思路1:利用向上调整算法思路2:利用向下调整算法6.创建堆的时间复杂度的分析三、TOPK问题四、堆排序一、堆的定义 堆是一种特殊的完全二叉树,他满足在这个完全二叉树中,父亲节点一定大于等于它的孩子结点(这种情况称为大堆)或者父亲节点一定小于等于他的孩子结点(这种情况称为小堆)。 所谓完全二叉树,就是一种结点排布和满二叉树一样但是结点个数不一定一样的二叉树,除原创 2021-11-08 00:01:00 · 894 阅读 · 1 评论 -
什么是BST?什么是哈希表?一文带你了解并实现查找的基础知识
本文的全部代码均已上传Gitee MySearching~Star一下再走把;文章目录一、查找的基础概念1.静态查找表:2.动态查找表:3.查找结构二、顺序表查找1.顺序表查找算法2.顺序表查找优化三、有序表查找1.折半查找2.插值查找3.斐波那契查找四、线性索引查找1.稠密索引2.分块索引3.倒排索引五、二叉排序树1.二叉排序树的定义2.二叉排序树的创建、插入和查找2.1 二叉排序树的查找2.2 二叉排序树的插入2.3 二叉排序树的创建3.二叉排序树的删除操作4.二叉排序树的中序遍历5.BST测试原创 2021-11-05 00:13:03 · 3825 阅读 · 3 评论 -
栈和队列的初阶知识与基础OJ练习
本文仅使用了两种常见的实现方法——动态数组栈、链队列,如果要看更多的队列和栈的实现方法,可以看我的下面这篇文章中有关队列和栈的部分:图的五种接口的实现, 本文的有关队列和栈的实现均已上传码云,可以来关注呀~:我的Gitee star一下再走啊文章目录????一、栈????1. 存储结构和接口????️2.初始化栈????️3. 入栈????4.判断栈是否为空????5.出栈????6.返回栈顶元素????7.判断栈的大小????8.销毁队列????二、队列????1.存储结构与接口????2.初原创 2021-11-01 00:41:58 · 437 阅读 · 2 评论 -
最完美的链表结构——带头双向循环链表
文章目录一、结点的存储结构二、带头双向循环链表的初始化三、带头双向循环链表的头插尾插和头删尾删1.尾插 O(1)2. 头插 O(1)3.尾删 O(1)4.头删 O(1)5.打印 O(N)四、带头双向循环链表的查找1.返回指向目标位置指针的查找 O(N)2.返回目标结点是在链表中位置的查找 O(N)五、带头双向循环链表的指定位置修改1.参数是指向给定位置的指针 O(1)2.参数是链表中的第pos-1个元素 O(N)六、带头双向循环链表在任意位置的插入和删除1. 参数为指向给定位置指针pos的插入 O(1)2.原创 2021-10-27 17:18:52 · 683 阅读 · 0 评论 -
照书写轮子——图的五种常见接口的实现(DFS、BFS、最小生成树问题、最短路径问题、关键路径问题)
如要查看本人写的有关图的全部代码,可以在本人的gitee中的C语言学习仓库里找MyGraph文件。我的Gitee 顺手点个收藏吧 本文用到了图的邻接矩阵存储、图的邻接表存储、图的边集数组存储,具体实现可以参考我的上一篇有关图存储结构的文章图的五种存储结构及其C语言实现 本文参考了《大话数据结构》 清华大学出版社 程杰著,个人认为这本书讲的还不错,大家有兴趣的话可以去看看,有什么不懂的地方可以私信问我问题(尽管我还差两章才看完)文章目录????一、图的遍历????1.深度优先遍历????1.1原创 2021-10-26 03:34:45 · 1064 阅读 · 5 评论 -
线性表基础OJ入门
文章目录????一、顺序表????️1. 移除元素????2.删除数组中的重复元素????3.合并有序数组????二、链表????1.移除链表元素????2.逆置单链表????3.链表的中间结点????4.链表的倒数第k个结点????5.合并两个有序链表????6.链表分割????7.链表的回文结构????8.相交链表????9.环形链表的判断????10.环形链表求交点????一、顺序表????️1. 移除元素给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素原创 2021-10-24 23:50:43 · 2370 阅读 · 1 评论 -
图的五种存储结构及其C语言实现
文章目录???? 一、图的基本概念????二、图的基本存储结构????1.邻接矩阵法????1.1 存储结构????1.2 创建邻接矩阵????1.3 打印邻接矩阵存储的图????1.4 测试函数????2.邻接表法????2.1 存储结构????2.2 创建邻接表????2.3 打印邻接表法存储的图????2.4 测试函数????️3.十字链表法????️3.1 存储结构????3.2 创建十字链表????3.3 打印十字链表存储的图????3.4 测试函数????4.邻接多重表法????4.1 存储结构原创 2021-10-18 01:09:31 · 4902 阅读 · 1 评论 -
一次性搞懂Huffmantree与Huffman编码
文章目录????一、哈夫曼树的引入????二、哈夫曼树的定义与原理????1.权????2.路径长度????3.带权路径长度????4.哈夫曼树的定义????三、创建哈夫曼树????1.Huffmantree的求法????2.Huffmantree的存储结构????3.创建Huffmantree????四、哈夫曼编码????五、由哈夫曼树求解哈夫曼编码????1.哈夫曼编码的存储结构????️2.哈夫曼编码的创建????️3.哈夫曼编码的展示????六、代码汇总与测试函数 一种最基本的压缩编码方式——哈原创 2021-10-16 23:30:37 · 417 阅读 · 0 评论 -
研究树为什么要重点研究二叉树?一次性搞懂二叉树和树的初阶知识
本文记录了一些有关树这种数据结构相对初阶的知识。 如果你是已经有一定的树这种数据结构的基础想知道为什么研究树要重点研究二叉树,可以去看目录 13、树、森林与二叉树的转化;如果你是和我一样的小白想循序了解一些树的有关知识,可以从头看起。文章目录✨1.树的定义✨2.结点的度 叶结点 树的度????1. 结点的度(Degree)????2. 叶结点(Leaf)????3. 树的度✨3.结点间的关系✨4.树的其他概念✨5.树的存储结构????1. 双亲表示法????2. 孩子表示法????3. 孩子兄弟原创 2021-10-15 13:50:22 · 2242 阅读 · 8 评论 -
没有指针和对象引用怎么实现单链表?一次性搞懂静态链表的原理与实现
文章目录✨一、静态表的提出背景✨二、静态表的原理????2.1 静态链表的数据类型????2.2 静态链表所在的空间的初始化????2.3 创建静态链表——创建头结点并按顺序输入n个元素????2.4 在链表的第i个位置插入元素????2.5 静态链表长度函数与静态链表打印函数????2.6 删除链表中的第i个节点????2.7 在链表中查找元素c与在链表中删除元素c????2.8 静态链表排序(待实现)????2.9 销毁静态链表✨三、静态链表的优缺点????优点:????缺点:✨四、汇总与测试函数✨五、原创 2021-10-11 00:57:45 · 1220 阅读 · 1 评论 -
动态顺序表与单链表
可变数组与链表一、可变数组1.实现 定义一种数据结构Array,里头放了一个整形指针array和用来表明当前这个数组的长度的size。a.头文件def.h#ifndef _ARRAY_H_#define _ARRAY_H_#define BLOCK_SIZE 10typedef struct{ int *array; int size;}Array;Array array_create( int init_size);//创建可变数组void array_fr.原创 2021-09-19 21:56:57 · 254 阅读 · 1 评论