数据结构
文章平均质量分 83
数据结构笔记
小倪同学 -_-
天道酬勤当至理,恒心定得上琼楼
展开
-
八大排序(详细分析+动图演示)
文章目录直接插入排序希尔排序直接选择排序直接插入排序动图演示:基本思想:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。代码实现:void InsertSort(int* a, int n){ for (int i = 0; i < n - 1; i++) { int end = i;// 记录有序数列的最后一个元素的下标 int tmp = a[end + 1];// 记录要插入的数据 whi原创 2021-09-24 17:41:43 · 787 阅读 · 0 评论 -
几道简单的二叉树OJ题
文章目录单值二叉树检查两颗树是否相同对称二叉树二叉树的前序遍历单值二叉树题目简介如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。LeetCode 965思路分析利用递归思想,判断根结点和它左右子结点是否相同,如果不同返回错误,否则继续向下访问,直到访问到空结点。代码实现bool isUnivalTree(struct TreeNode* root){ if(root==NULL) r原创 2021-09-12 17:38:13 · 204 阅读 · 1 评论 -
二叉树的相关操作
文章目录计算结点个数计算叶子结点个数二叉树第k层节点个数二叉树深度/高度二叉树查找值为x的节点判断二叉树是否是完全二叉树二叉树销毁在进行操作前先创建一棵二叉树typedef char BTDataType;typedef struct BinaryTreeNode{ BTDataType data; struct BinaryTreeNode* left; struct BinaryTreeNode* right;}BTNode;BTNode* BuyNode(BTDataType x)原创 2021-09-11 16:52:06 · 263 阅读 · 1 评论 -
二叉树的遍历
文章目录二叉树的构建二叉树的结点二叉树的初始化二叉树的前序遍历中序遍历后序遍历层序遍历二叉树的构建为了方便下文对二叉树的遍历,我们先自己构建一棵二叉树二叉树的结点二叉树每个结点只有左右两个分支,我们可以参考链表构建一个结构体,让其有两个指针分别指向左结点,右结点。typedef char BTDataType;typedef struct BinaryTreeNode{ BTDataType data; //可以根据需要改变存储数据类型 struct BinaryTreeNode*原创 2021-09-11 15:29:41 · 86 阅读 · 0 评论 -
数据结构之堆
文章目录堆的概念及结构定义堆堆的初始化插入数据判空删除堆顶的数据获取堆顶数据获取元素个数打印销毁堆Topk问题代码总结堆的概念及结构定义堆实现堆的功能首先要定义堆的结构体typedef int HPDataTpye;typedef struct Heap{ HPDataTpye* a; //存储数据 int size; //保存元素个数 int capacity; //存储容量}HP;堆的初始化思路:先开辟一块空间,将传入的数据存放到堆的原创 2021-09-07 17:14:00 · 140 阅读 · 0 评论 -
树和二叉树的相关概念
文章目录树的概念树的相关概念树的表示二叉树的概念特殊的二叉树二叉树的性质树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。注意:树形结构中,子树之间不能有交集,否则就不是树形结构树的相关概念节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的度为6叶节点或终端节点:度为0的节点称为叶节点;如上图:B、C、H、I…等节点为叶节点非终端节点或分支节点:度不原创 2021-09-04 09:10:01 · 161 阅读 · 1 评论 -
数据结构之队列
文章目录队列的概念及结构队列的实现思路项目文件的创建队列功能的实现队列的定义队列的初始化队列的判空队列的入队队列的出队获取队首元素获取队尾元素获取队列元素个数队列的销毁总结队列的概念及结构队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表, 队列具有先进先出FIFO(First In First Out)入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头队列的实现思路队列注重入队和出队操作,入队相当于尾插,出队相当于头删。队列用数组,链表都可以实现,哪种方原创 2021-08-12 09:57:44 · 159 阅读 · 0 评论 -
数据结构之栈
文章目录栈的概念栈的功能实现栈结构的实现栈的初始化栈的判空读取栈顶数据插入数据删除数据栈中数据个数栈的销毁总结Stack.h文件Stack.c文件栈的概念栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO (Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。栈的功能实现创建三个文件头文件Stac原创 2021-08-11 16:21:11 · 1000 阅读 · 0 评论 -
数据结构之双链表
文章目录为什么需要双链表双链表的结构项目的创建双链表的功能实现结点的定义双链表初始化双链表打印双链表判空双链表查找指定位置插入指定位置删除双链表尾插,尾删双链表头插,头删计算结点个数双链表的销毁为什么需要双链表单链表相对于顺序表在空间复杂度上有了很大的提升,但是它在时间复杂度上还有很大缺陷尾插,尾删时需要遍历整个链表找到尾结点或其前一个结点,这样就造成了时间上的浪费在指定位置插入数据时需要找到前一个结点,有种多此一举的感觉为了解决上述问题,我们引入了双链表双链表的结构项目的创建创建三个原创 2021-08-11 11:08:48 · 297 阅读 · 0 评论 -
数据结构之单链表
文章目录前言链表的概念及结构顺序表的功能实现创建结点单链表打印单链表尾插单链表头插单链表尾删单链表头删计算链表大小判断链表是否为空查找某个值在指定位置插入指定位置删除单链表的销毁总结前言顺序表中虽然代码简洁但是存在许多问题中间/头部的插入删除,时间复杂度较高(O(N))增容时需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗。增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到200,我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间。原创 2021-08-10 15:44:35 · 384 阅读 · 1 评论 -
数据结构之顺序表
文章目录线性表顺序表的概念及结构顺序表的功能实现定义顺序表对顺序表初始化顺序表打印尾插尾删头插头删线性表线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一 种在实际中广 泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构.上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。顺序表的概念及结构顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况原创 2021-08-09 10:23:58 · 152 阅读 · 0 评论 -
时间复杂度和空间复杂度
文章目录一.算法效率如何衡量一个算法的好坏算法的复杂度时间复杂度大O的渐进表示发法常见时间复杂度计算举例空间复杂度常见的复杂度对比一.算法效率如何衡量一个算法的好坏对于如下斐波那契数列,它的代码十分简洁,但简洁一定好吗?当我们运算时会发现,该代码进行了大量重复运算,导致其效率低下。那么如何衡量一个算法的好坏呢?int Fib(int n){ if (n < 3) return 1; else return Fib(n - 1) + Fib(n - 2);}算法的复杂度算法原创 2021-08-02 11:05:29 · 202 阅读 · 0 评论