![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 64
flyyyya
这个作者很懒,什么都没留下…
展开
-
二叉搜索树
二叉搜索树概念二叉搜索树又称为二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有结点的值都小于根结点的值。若它的右子树不为空,则右子树上所有结点的值都大于根结点的值。它的左右子树也分别是二叉搜索树。int a[]={5,3,4,1,7,8,2,6,0,9}二叉搜索树的查找定义一个树节点节点中包括三个值:节点值,左指针,右指针节点类当中只需实现一个构造函数即可,用于构造指定节点值的节点。 struct BSTreeNode { K _ke原创 2022-07-01 18:27:43 · 495 阅读 · 6 评论 -
数据结构之堆的模拟实现
堆的模拟实现堆的初始化堆的销毁堆的打印堆的插入堆的删除获取堆顶的数据获取堆的元素个数堆的判空堆的初始化首先,先创建这个堆的结构体,其中有存储数据的数组,存储元素的个数和最大容量。typedef int HPDataType;typedef struct Heap{ HPDataType* a; int size; int capacity;}HP;接着对堆进行初始化,我们先开辟一个空间将其数组中的元素赋值拷贝到堆中,然后进行堆的初始化。void HeapInit(HP* php, H原创 2021-10-06 19:40:01 · 294 阅读 · 7 评论 -
数据结构之双向带头循环链表
双向带头循环链表一、双向带头循环链表的优劣势二、双向带头循环链表的实现一、定义结构体二、创建节点函数三、初始化链表四、链表的尾插五、链表的头插六、链表的尾删七、链表的头删八、链表的查找九、链表的插入十、链表的打印一、双向带头循环链表的优劣势结构复杂,但由于结点信息中多包含了一个指向上一个结点的指针,这样操作起来就特别方便,它弥补了单链表的缺点,使得链表更加灵活、实用。二、双向带头循环链表的实现一、定义结构体typedef int LTDataType;typedef struct ListNo原创 2021-09-12 20:04:42 · 396 阅读 · 12 评论 -
【算法训练营】(day3)
算法训练营空间复杂度,fib理解,剪枝重复计算核心考点:场景转化模型,模型提取解法,简单dp,fib核心考点:场景转化成模型,特殊情况分析,简单dp空间复杂度,fib理解,剪枝重复计算递归的方法我们已经很熟悉了,这里我们写一个迭代版本的。class Solution {public: int Fibonacci(int n) { if (0 == n) { return n; } int first = 1; int second = 1; int third =原创 2021-09-07 10:40:28 · 340 阅读 · 13 评论 -
数据结构之排序
排序一、排序的概念二、常见排序算法的实现1. 插入排序2.希尔排序一、排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。应用:淘宝的搜索栏,大学的排名等等。二、常见排序算法的实现1. 插入排序基本思想:直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。void InsertSort(int *a, int n){原创 2021-08-27 17:53:51 · 932 阅读 · 16 评论 -
数据结构之堆的应用
堆的使用1.堆的基本介绍2.堆向下调整算法1.堆的基本介绍1.物理结构是一个数组2.逻辑结构是完全二叉树3.大堆(树中所有的父亲大于等于孩子) 小堆(树中所有的父亲小于等于孩子)完全二叉树每一层有2^n个树叉父子间关系:leftchild=parent2+1rightchild=parent2+2parent=(child-1)/22.堆向下调整算法...原创 2021-08-20 18:00:37 · 824 阅读 · 8 评论 -
初始栈和队列之队列篇
1.队列的概念及结构队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头2.队列的实现...原创 2021-07-15 16:34:24 · 306 阅读 · 4 评论 -
初识栈和队列(1)
栈的概念及结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈,出数据也在栈顶。栈的实现栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些,因为数组在尾上插入数据的代价比较小。相对而言,如果选一个来实现,双向带头循环列表被排除掉,太过麻烦。如果选一原创 2021-07-13 10:49:30 · 168 阅读 · 4 评论 -
数据结构之二叉树
一、树的结构及概念1.树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。这是一个简单的树(画图板不太会用,我下去努力学)每一颗数都是由根+多个子树构成的,没有子树是空树树与非树?1.子树是不相交的(树中没有环)2.除了根结点外,每个节点有且仅有一个父节点。树的必备知识(1)结点的度:一个节点含有的子树的个数称为该节点的度;如上图:A的为6,即B、C、D、E、F、G。原创 2021-05-17 14:29:20 · 562 阅读 · 7 评论 -
玩转链表(2)之leetcode习题(1)
leetcode习题(简单篇)原创 2021-04-22 10:55:57 · 296 阅读 · 3 评论 -
玩转链表(1)
顺序表问题及思考问题:中间/头部的插入删除,时间复杂度为O(N)增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗。增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到200,我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间。链表的概念及结构概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。链表是单独存储数据通过指针指向下一个地址。打印链表节点数据void SLi原创 2021-04-16 10:07:16 · 612 阅读 · 5 评论 -
数据结构-顺序表
一、线性表线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。二、顺序表顺序表:本质是数组,动态增长,并且要求里面存储的数据必须是从左到右连续的。顺序表的缺陷:1、动态增容有性能消耗2、需要头部插入数据,需要挪动数据...原创 2021-04-10 15:08:49 · 1493 阅读 · 6 评论 -
了解时间复杂度
1.算法效率算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。2.大o的渐进表示法大O符号(Big O notation):是用于描述函数渐进行为的数学符号。用通原创 2021-04-07 19:57:39 · 2193 阅读 · 7 评论