![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 96
忆梦初心
这个作者很懒,什么都没留下…
展开
-
【数据结构】手撕排序NO.2----直接插入排序与希尔排序
本期是排序篇的第二期,我们的主角是插入排序。插入排序分为直接插入排序和希尔排序,后者是对前者的优化。在座的各位或多或少都玩过扑克牌吧!我们在摸扑克牌时,往往会将大牌插到小牌后面,小牌插到大牌前面。当摸完所有的牌后,我们手中的牌自然也就有序了,这实际上就是用到了插入排序的思想原创 2023-08-01 09:49:56 · 1728 阅读 · 121 评论 -
【数据结构】手撕排序NO.1----排序初识
排序是数据结构中非常重要的内容,从本期开始,我们会对各种各样的排序算法进行剖析和实现,本期要点是对排序进行一个整体的认识,然后介绍一下两种最简单的排序,最后笼统地介绍一下各大排序算法的复杂度和稳定性。原创 2023-07-18 18:54:25 · 1519 阅读 · 95 评论 -
【数据结构】有关堆你知多少?
本期我们介绍的是大家或许耳熟能详的一种结构----堆。本期通过堆的概念与结构入手,然后讲解堆的向上调整算法和向下调整算法以及分析它们的复杂度,分别使用这两种调整方法建堆进行介绍和对比,最后讲解了有关堆的两个应用:TopK问题和堆排序。本期的每个过程都配有图文解释和完整代码,相信一定能在本篇中收获到有用的知识。原创 2023-07-14 10:06:14 · 1842 阅读 · 84 评论 -
【数据结构】从树到二叉树
本期我们要学习一种非线性的数据结构------》二叉树想必二叉树这个名字各位或多或少都有听说过,真是久仰大名了。而在学习树之前,我们要先来学习一下树,从对树基本概念的学习逐步过渡到二叉树的学习。本文将从树的概念与性质过渡到二叉树的概念与性质,最后详细讲解有关二叉树的相关接口与操作。废话少说,上菜!!!原创 2023-07-08 18:59:17 · 1632 阅读 · 80 评论 -
【数据结构】带你深度理解队列
与栈同理,队列也是一种限制型的数据结构,不支持随机访问。其只允许在固定的两端进行操作。因此也不存在查找,打印,修改等需要对其他位置进行操作的接口,否则会破坏队列的特性。数据结构的实现方式多种多样,为了在隐藏设计细节的情况下使用方依旧能够很方便的使用,尽管有一些操作仅仅只有一两行代码,我们还是封装成函数作为对外的接口供使用方调用。原创 2023-04-01 22:37:16 · 2468 阅读 · 98 评论 -
【数据结构】带你深入理解栈
栈是一种特殊的线性表。其只允许在固定的一端进行插入和删除元素的操作,进行数据的插入和删除的一端称作栈顶,另外一端称作栈底。栈不支持随机访问,栈的数据元素遵循后进先出的原则,即LIFO(Late In First Out)。我们推荐采用顺序表来实现对栈的操作,原因如下:1. 栈的特性完美避开了顺序表尾插尾删效率过低的问题,虽然需要扩容,但是链表创建结点也同样需要成本,而顺序表扩容频率不像链表一样如此频繁。2. 我们知道CPU与主存速度上存在巨大差距,为了提高效率,CPU和主存之间还存在着cache高速缓原创 2023-03-10 18:17:25 · 3165 阅读 · 66 评论 -
【数据结构】动图详解双向链表
带头双向循环链表:其结构是链表8种结构中最复杂的,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。此链表的结点在单向链表的基础上,添加了前驱指针prev指向上一个结点,然后添加了上述所描述的头结点,而循环则是体现在首尾结点相连上。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现起来反而更加简单。通过上面一个个接口的实现,我们发现:虽然双向带头循环链表的结构比起单向链表结构复杂太多,但对于各接口的实现反而变得更加方便,并且某些接口时间效率更高原创 2023-02-04 18:36:07 · 1715 阅读 · 71 评论 -
【数据结构】动图详解单向链表
顺序表中间及头部的插入与删除,需要对原有数据进行移动,时间复杂度为O(N),成本较高使用realloc进行增容时需要申请新空间,释放旧空间,拷贝数据,消耗较高。由于我们无法知道用户实际需要多少空间,在增容时往往可能会有大量的空间剩余。那么这些问题要如何解决呢?通过链表。 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。每当我们需要新增数据时,我们只需申请一个新结点用来保存数据,然后用指针将链表与新结点链接起来即可,并不需要进行数据拷贝。原创 2023-01-31 19:10:59 · 2305 阅读 · 58 评论 -
【数据结构】详解顺序表
线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,线性表中的一种,一般情况下采用数组存储,支持元素的随机访问。在数组上完成数据的增删查改。顺序表一般可以分为:1. 静态顺序表:使用定长数组存储。使用结构体变量来维护每一张顺序表,结构体的第一个成员是存储顺序表的数组,第二个成员则是存储顺序表内的元素个数。原创 2023-01-28 23:57:07 · 658 阅读 · 46 评论 -
【数据结构】详谈复杂度
我们在做一些算法题时,经常会发现题目会对时间复杂度或者空间复杂度有所要求,如果你不知道什么是复杂度时,你可能就无法正确的完成题目。因此,我们在学习数据结构与算法的第一步,就是要理解什么是复杂度。复杂度是衡量算法效率的标准,而算法分析效率分为两种:时间效率和空间效率。由此,复杂度也被分为两种:时间复杂度和空间复杂度。时间效率被称为时间复杂度, 而空间效率被称作空间复杂度。时间复杂度主要衡量的是一个算法的运行速度。原创 2023-01-25 18:21:28 · 2091 阅读 · 52 评论