数据结构
lanmengyiyu
github:https://github.com/lanmengyiyu
youtube:https://www.youtube.com/channel/UC5pExhZmSEsYwPOkvs3M5vA?view_as=subscriber
email:[email protected]
展开
-
线性表的顺序存储和链式存储差异
线性表的顺序存储和链式存储方式在存读数据以及插入删除数据时,时间复杂度不同。顺序存储的典型例子为数组,链式存储的典型例子为单链表。众所周知,当读取数据较为频繁时,我们选择顺序存储方式,当插入和删除操作较为频繁时,我们选择链式存储方式。接下来,我们将分析这样做的原因:1.顺序存储:1)在读取数据时,读取任意位置i的元素,都可以用a[i]获得,因此,时间复杂度为o(1).2)在插入和删除数据时,不可能...原创 2017-05-25 20:26:22 · 7373 阅读 · 0 评论 -
括号匹配(栈的应用code)
括号匹配问题是判断在字符串中,是否每个左右括号都相互匹配。在这里我们用栈的思路来处理。栈的建立与进制转换博客相同,判断匹配的代码如下:bool原创 2017-08-13 15:58:04 · 440 阅读 · 0 评论 -
错题-数据结构(列表)
对于n个节点的双向、单向列表,定位某节点p直接前驱的最坏时间复杂度分别原创 2017-08-06 00:29:17 · 1302 阅读 · 0 评论 -
插入排序(内附代码)
插入排序的原理与打扑克摸牌一致,当一张新牌来时,我们会选择一个合适的位置插入,插入排序算法原理类似,当数据的前半部分有序时,依次遍历后半部分的数据,将每个无序数据插入到前面有序部分中。在此处,我们用双链表的方式实现该算法。原创 2017-08-04 00:34:15 · 507 阅读 · 0 评论 -
选择排序(内附代码)
选择排序事实上是对冒泡排序的改进,每次只选择前n个元素中最大的一个与无序部分的最后位置元素交换,将冒泡排序中n次的交换减少至1次。本部分基于双链表实现,首先来看一下双链表的建立过程原创 2017-08-03 01:01:51 · 1098 阅读 · 0 评论 -
冒泡排序笔记(内附代码)
冒泡排序是最简单的排序算法,每次扫描一趟数组,比较相邻元素,若逆序则交换,第一次确定最后一个位置的元素,以此类推直至所有元素按顺序排列。 因此,最直接的思路是对长度为n的数组扫描n-1原创 2017-07-09 21:55:38 · 383 阅读 · 0 评论 -
扩容策略(递增和倍增)
扩容指的是,当数组内可用空间耗尽,就动态地扩大内部数组的容量。原创 2017-06-30 00:28:53 · 2751 阅读 · 0 评论 -
二分查找笔记(内附代码)
有序数组的元素不是随机分布的,而是按照大小的相对位次排列,我们默认从小到大排列。而查找函数,我们希望可以返回不大于某一值的最右边的位置,以便于配合插入函数,使插入新的元素后,仍保持有序数组。原创 2017-07-08 23:22:06 · 315 阅读 · 0 评论 -
错题-数据结构(向量)
1.是否可以将视频里向量扩容代码中的:for (int i = 0; i < _size; i++) _elem[i] = oldElem[i];替代为:memcpy(_elem, oldElem, _size * sizeof(T));答: 否,因为后者能否达到目的与元素类型T有关。原创 2017-07-11 22:48:20 · 1157 阅读 · 1 评论 -
错题整理-数据结构(绪论)
错题原创 2017-06-22 16:21:17 · 1862 阅读 · 0 评论 -
时间复杂度(数据结构笔记)
时间复杂度(数据结构笔记)时间复杂度通常指程序运行所需要的时间,一般我们分析最坏情况下的时间复杂度。原创 2017-06-09 13:21:25 · 582 阅读 · 0 评论 -
斐波那契数列的递归和迭代(数据结构笔记)
斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……接下来我们将以斐波那契数列为例,分析递归和迭代的区别。通常情况下,递归更加简单直接,但是迭代在时间复杂度上更具有优势。原创 2017-06-19 21:32:15 · 1476 阅读 · 0 评论 -
递归策略(减而治之和分而治之)
递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。原创 2017-06-14 17:11:33 · 4777 阅读 · 0 评论 -
进制转换(栈的应用code)
进制转换,指的是将某一种进制的数转换为另一种进制的数表示。在计算机领域经常用到,二进制,十进制,十六进制之间的相互转换。本文基于栈这一工具实现进制的转换,主要是因为在数学上,我们利用短除法来解决这一问题,先求得的余数在表达上放在最后,这种机制跟栈的机制很像。原创 2017-08-06 16:19:59 · 1115 阅读 · 0 评论