数据结构
文章平均质量分 88
五颗粒粒
你就是海滩下的那乌克丽丽
寻找着逆光让暧昧变成剪影
展开
-
二叉树进阶——迭代实现前中后序遍历
二叉树的递归遍历代码简单且容易理解,具体可以看这篇博客,里面的递归解释的较为详细数据结构——二叉树的链式结构及实现(C语言)然而现实生活中,一棵树的节点往往较多且深度更深时,如果继续使用递归就会产生较多的栈帧,导致栈溢出,对于Linux的进程地址空间来说,一个进程所分配的栈的空间大小是有限且较小的,因此这时候我们就需要使用迭代的方式来实现一棵树的遍历。不过对于现代编译器而言,debug版本下的递归较大时会导致栈溢出,但是release版本编译器做了优化往往和迭代的效率差不多。尽管这样,迭代方式还是要原创 2021-06-16 20:48:24 · 593 阅读 · 0 评论 -
数据结构——二叉搜索树的C++实现
数据结构——二叉搜索树的C++实现GitHub下载链接:一、二叉搜索树的基本概念和存储结构1.1 基本概念1.2 二叉搜索树的结构二、二叉搜索树的基本操作2.1 二叉搜索树的查找2.2 二叉搜索树的插入2.3 二叉搜索树的删除三、二叉搜索树的实现1.BSTree.hpp四、二叉搜索树的应用——KV模型1.BSTreeKV.hppGitHub下载链接:https://github.com/Kyrie-leon/Data_Structures/tree/main/BSTreeNode一、二叉搜索树的基本概原创 2021-05-16 00:10:35 · 637 阅读 · 1 评论 -
数据结构——冒泡排序(C语言)
C语言详解冒泡排序一、基本思想二、算法实现及优化三、代码清单一、基本思想冒泡排序是交换排序中最易理解也最经典的一个排序,其基本思想是从左向右依次比较相邻两个元素的大小,如果左边大于右边就交换,一趟排序后就可以让最大的值浮到最右侧。不断重复这个操作就可以让数组有序。二、算法实现及优化想要实现冒泡排序,我们首先写出一趟冒泡排序,很简单,从左向右依次比较即可,只要左边大于右边就发生交换注意:数组有n个元素,我们从数组的第1个元素开始比较,到数组的第n-1个元素结束,共比较了n-1次。例如下图,从第1原创 2021-01-28 20:38:30 · 5796 阅读 · 0 评论 -
数据结构——二叉树的链式结构及实现(C语言)
C语言实现二叉树的链式结构一、二叉树的链式存储二、二叉树链式结构的遍历2.1 前序/中序/后序的递归结构遍历2.1.1 前序遍历一、二叉树的链式存储二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址 。typedef char BTDataType;typedef struct BinaryTreeNode { BTDataType _dat原创 2021-01-20 22:56:07 · 9469 阅读 · 4 评论 -
数据结构——插入排序(C语言)
C语言实现插入排序一、直接插入排序1.1 基本思想1.2 代码实现1.3 特性总结二、希尔排序1.1 基本思想1.2 代码实现1.3 特性总结一、直接插入排序1.1 基本思想直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。实际中我们玩扑克牌时,就用了插入排序的思想1.2 代码实现我们首先写出插入排序只排一趟的代码,如下图所示,假设数组[0,end]已经是有序数组,那么我们原创 2021-01-19 22:38:19 · 3044 阅读 · 0 评论 -
数据结构——双向循环链表的结构与实现(C语言)
C语言实现带头双向循环链表一、双向链表的结构与实现1.1 带头双向循环链表1.2 带头双向循环链表的实现二、双向链表的接口实现2.1 创建双向链表2.2 双向链表销毁2.3 双向链表在pos的前面进行插入2.4 双向链表删除pos位置的节点2.5 双向链表打印2.5 双向链表尾插2.6 双向链表尾删2.7 双向链表头插2.8 双向链表头删2.9 双向链表查找三、代码清单3.1 List.h3.2 List.c3.3 test.c四、测试结果一、双向链表的结构与实现1.1 带头双向循环链表结构最复杂,原创 2021-01-12 14:48:13 · 2596 阅读 · 0 评论 -
数据结构——堆(二叉树)的结构及实现(C语言)
堆的C语言实现一、堆的概念及结构二、一、堆的概念及结构什么是堆?如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki <= K2i+1 且 Ki<= K2i+2 (Ki >= K2i+1 且 Ki >= K2i+2) i = 0,1,2…,则称为小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆二、...原创 2021-01-10 20:51:35 · 2219 阅读 · 2 评论 -
数据结构——队列(C语言)
C语言实现队列GitHub代码下载一、队列的概念及结构二、队列的实现2.1 队列的链式结构存储2.2 初始化队列2.3 队尾入队列2.4 队头出队列2.5 获取队列头部元素2.6 获取队列队尾元素2.7 获取队列中有效元素个数2.8 检测队列是否为空,如果为空返回非零结果,如果非空返回02.8 销毁队列三、队列的接口测试四、代码清单4.1 Queue.h4.2 Queue.c4.3 test.cGitHub代码下载https://github.com/Kyrie-leon/Data_Structures原创 2021-01-07 18:19:50 · 2065 阅读 · 2 评论 -
数据结构——栈(C语言)
C语言实现栈和队列一、栈1.1 栈的概念及结构1.2 栈的实现1.2.1 栈的存储定义二、队列一、栈1.1 栈的概念及结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。1.2 栈的实现栈的实现一般可以使用数组或者链表实现,相对而言数组的原创 2021-01-07 12:35:29 · 2667 阅读 · 0 评论 -
数据结构——单链表接口实现(C语言)
单链表的接口实现一、链表的概念及结构1.1 概念1.2 结构二、链表的接口实现2.1 链表的存储三级目录一、链表的概念及结构1.1 概念链表是一种物理结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。1.2 结构二、链表的接口实现2.1 链表的存储三级目录...原创 2020-12-12 22:41:00 · 2184 阅读 · 2 评论 -
数据结构——顺序表接口实现(C语言)
C语言实现顺序表的增删查改一、概念及结构二、接口实现2.1 顺序表的两种存储方式与结构图2.1.1 顺序表的静态存储2.1.3 顺序表的动态存储2.2 顺序表初始化2.3 顺序表增容2.4 顺序表打印2.5 顺序表尾插2.6 顺序表尾删2.7 顺序表头插2.8 顺序表头删2.9 顺序表查找2.10 顺序表在任意位置插入2.11 顺序表删除任意位置的值2.12 顺序表销毁3. 工程化实现3.1 SeqList.h3.2 SeqList.c3.3 test.c一、概念及结构顺序表是一段物理地址连续的存储单元原创 2020-12-04 16:17:12 · 2003 阅读 · 0 评论