![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 78
写bug的小屁孩
这个作者很懒,什么都没留下…
展开
-
排序算法合集(1)
今天我们正式开始讲述算法中的排序。排序算法是我们十分重要的算法,为什么呢?排序是在各种情况下都非常重要的,无论是在人类社会还是在计算机科学中。以下是一些排序的重要性:数据分析:在数据分析中,对数据进行排序可以帮助我们更好地理解数据。例如,对销售数据按照时间顺序进行排序可以帮助我们了解产品销售的趋势。搜索算法:在搜索算法中,排序可以帮助我们快速地找到需要的信息。例如,在搜索引擎中,对搜索结果按照相关性进行排序可以使用户更容易找到他们需要的信息。原创 2023-04-19 18:08:04 · 4776 阅读 · 1 评论 -
二叉树(OJ)
我们来看一下题目的具体要求:既然我们都学了二叉树了,我们就应该学会如何去递归。分析一下:我们如果去用遍历的思路去做,肯定是可以做出来的,遍历嘛,先将第一次出现的数给存起来作为一个key,那么遍历整个二叉树,如果出现了一个不同于这个key的数值,那么我们就说这个二叉树不是单值二叉树,如果到最后访问完整个二叉树都没有出现一个不同于这个key的值,那么我们就可以说这个二叉树是一个单值二叉树。但是看了一下这个思路,一个个遍历是不是显得十分的龊啊?原创 2023-04-11 20:12:13 · 753 阅读 · 0 评论 -
梦中情树---二叉树
今天就来讲树的一种特殊结构---二叉树当然先来给大家看一张图片看到这棵树了吗?它从根开始,每个结点都有且仅有两个分支,这个结构就是我们的二叉树。其实我们上次讲的堆也可以看成一棵二叉树,但是人家的本质是一个数组。我今天所讲的二叉树就是以链式的结构来展开。再看链式的二叉树的实现前,还是先来回顾一下二叉树的概念:1.空树。2.非空树:有左右两棵子树和根节点所形成。原创 2023-04-11 19:21:13 · 6002 阅读 · 0 评论 -
堆来咯!!!
int size;//堆当前的有效元素个数//堆的容量}Heap;由于堆是一个数组,所以我们需要用顺序表的形式动态的管理它。所以在这个结构体里头我们定义了该结构体数据类型的数组用来存储数据,size用于展示当前堆的有效元素个数,capacity用于展示当前堆的容量。原创 2023-04-10 13:35:19 · 4640 阅读 · 0 评论 -
栈与队列(OJ)
那么就到了最后一步了,我们遍历完整个字符串,发现过程中没有发现任何的不匹配问题,也就是我们上面分析的三种情况的二、三种情况,那么我们还需要判断我们分析的第一种情况,第一种情况只需要检查一下我们的栈是否为空即可,如果我们的栈不是空的,那么就完美了,我们直接返回true,如果不是,我们就返回false。假设我们的栈里面一次入栈了1-7的数字,我们需要一样按顺序去出栈,那么我们第一个数字就必须输出1,那么我们就必须如下图,先把1以上的其他数字入另一个栈。原创 2023-04-03 22:03:54 · 1274 阅读 · 3 评论 -
顺序栈和非循环队列来咯!!!
通过上几篇文章,我们一直在学习我们的线性表,我们学习了我们的顺序表,链表等相关线性表,那么我们今天来学习一下栈和队列这两种线性表叭!当然我们今天只介绍我们的顺序栈和非循环的队列。可能有小伙伴想问了:为什么不介绍链栈,共享栈,循环队列呢?原因很简单啊~我不会!当然,过几天应该会学会,过几天的事过几天再说。马上就进入我们的顺序栈和非循环队列当中吧。原创 2023-03-23 08:53:52 · 798 阅读 · 3 评论 -
带头循环双向链表来咯!!!
继上文,我们了解了结构最简单的一种链表---单链表那么我们今天就来讲解一下结构最复杂的链表---带头循环双向链表。当然今天的链表也许看起来结构十分复杂,对比单链表看上去难上很多,但实际上,越是结构复杂,越是操作起来简单。那么话不多说,马上就开始我们的带头循环双向链表的讲解吧那么还是先来了解一下各种特点的区别吧~原创 2023-03-14 16:42:03 · 840 阅读 · 4 评论 -
单链表来咯!!!
接上文,我们介绍了线性表以及常见的线性表“顺序表”,但是顺序表也有美中不足的地方,并不是任何时候都适合使用顺序表的,以下为顺序表的缺点:1.插入删除操作需要移动大量元素2.当线性表长度变化较大时,难以确定存储空间的容量,造成存储空间的碎片所以我们今天就来了解一下另一种线性表---链表!!!那么什么是链表呢?1、链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,有一系列结点(地址)组成,结点可动态的生成。原创 2023-03-13 21:05:44 · 824 阅读 · 1 评论 -
顺序表来喏!!!
还记得前面的文章:《通讯录的实现》吗?通讯录的完成就借助了顺序表这种数据结构!!!那么今天我们就来介绍我们的顺序表介绍顺序表前,我们来了解一下线性表的概念顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表:可动态增长的数组,要求数据是连续存储的。原创 2023-03-11 18:03:22 · 986 阅读 · 1 评论 -
大端/小端
大小端模式,是电脑的一种存储模式。大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,数据从高位往低位放;这和我们的阅读习惯一致。小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。在乔纳森·斯威夫特。原创 2023-01-22 12:06:24 · 1345 阅读 · 2 评论 -
冒泡排序算法
最差时间复杂度:O(n^2)平均时间复杂度:O(n^2)最好时间复杂度:O(n)原创 2023-01-21 11:22:39 · 1218 阅读 · 1 评论 -
二分查找与线性查找
二分查找的基本思想是将n个元素分成大致相等的两部分,取a [n/2]与x做比较,如果x=a [n/2],则找到x,算法中止;线性查找又称顺序查找,是一种最简单的查找方法,它的基本思想是从第一个记录开始,逐个比较记录的关键字,直到和给定的K值相等,则查找成功;二分查找:时间复杂度为O(logn),一般所用时间比线性查找短,速度快,但是最大的问题就是只能对有序的数组进行查找,只要是无序的数组都无法进行二分查找。假使总共有n个元素,那么二分后每次查找的区间大小就是n,n/2,n/4,…原创 2023-01-20 21:09:33 · 1464 阅读 · 0 评论 -
汉诺塔(hanio)
在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而。设a, b, c是3个塔座:开始时,塔座a上有n个自上而下、由小到大地叠在一起圆盘,各圆盘从小到大编号为1, 2, …规则3:在满足移动规则1和2的前提下,可将圆盘移至a, b, c中任一塔座上。原创 2023-01-19 17:25:57 · 2893 阅读 · 2 评论 -
KMP算法
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。它的时间复杂度为O(m+n)。原创 2023-01-18 19:28:41 · 5362 阅读 · 0 评论 -
BF暴力算法
假设模式串的长度为N,主串为M。那么该算法最高效的情况就是第一次就匹配成功,那么while循环只需要执行N次即可完成匹配,则时间复杂度为O(N);最坏的一种情况主串的末尾处的倒数N长度的串与模式串匹配成功,则while循环需要执行M*N次,那么时间复杂度为O(N*M)。BF算法简单粗暴,但是还可以对它进行修改,那么下一篇会讲我们的KMP算法的实现。查找主串中字串出现第一次的位置。原创 2023-01-18 11:15:50 · 1277 阅读 · 0 评论