数据结构学习整理(完善中...)

数据结构的分类

1.集合结构;
2.线性结构;一对一的关系
3.树型结构;一对多的关系
4.图形结构。多对多的关系

基于数组实现的数据结构

数组为什么需要指定长度?
想象一下,如果不指定长度的话,内存空间一次性得开辟多少连续的空间,我们是不能确定的。
因为数组是内存空间中连续的空间,这样是为了数组的连续编号性。所以到哪里截止就是一个需要确定的问题。

数组最大的优点:快速查询,所以数组最好应用于索引有语义的情况。
缺点:不能动态的开辟空间。每次开辟空间都得进行一轮复制操作。

动态数组

java中的动态数组

在java中,就是指ArrayList,在添加或删除元素时,都需要根据当前容器的大小来动态控制内部数据的大小。

细节点

第一,扩容的大小:与当前数量级成正比最好,所以每次扩容都是当前数组量的2倍。
第二,数字得size其实就是下一个待添加元素的索引。

涉及到复杂度的两个概念

均摊复杂度:一个相对比较耗时的操作,如果不是每次都触发的话,那么可以分摊到其他操作过程中去。
复杂度的震荡:在某些特殊情况下或者操作下,复杂度突然增加。

后进先出:俄罗斯方块,往一个容器里放盒子。

队列

先进先出:生活中的排队。
普通队列:出队操作O(n)复杂度,每次出队时,需要对整个数据进行一次前移操作。由此出现了循环队列,多一个front指针来指向前节点。
注意点:对front和tail的操作需要考虑%(取余)操作,让指针循环起来。

链表

性质:一种真正的动态数据结构。在添加元素等逻辑操作时,为了统一处理逻辑,增加虚拟头节点。

基于链表也可形成栈和队列,形成栈时,由于只在第一个元素进行操作,所以可直接基于链表这种数据结构进行实现。但形成队列的时,会涉及到头部与尾部的操作,所以需要添加一个尾指针,尾部作入队操作,头部作出队操作。

循环双向列表:先看双向链表,每个元素都包含上一个元素和下一个元素节点,再看循环链表,就是增加一个头指针和尾指针;再看形成了闭环的循环链表,可以只维护头指针,因为整体是循环的,可以看成一个圆,然后增加一个虚拟头节点,向头部添加元素就是向虚拟头节点后插入元素,向尾部添加元素就是向虚拟头节点前插入元素。如下图:

示意图

链表与数组的对比

链表的优势在于(取自bobo老师问答区总结):

1,节省空间,由于不是静态分配内存,没有空间浪费

2,不需要resize。在不停的添加且删除元素的过程中,如果经常触发resize,resize本身会很耗时。

3,如果你存储的数据没有顺序性要求,换句话说,如果你不会在特定位置插入或者删除元素,而只会在头尾插入或者删除元素的话,链表的时间复杂度是O(1)的!对于数组,只有在数组末尾添加元素,才是O(1)级别,而且是均摊后的结果。

4,对于java.util.LinkedList底层的双链表来说,在指定位置插入元素,或者删除指定位置的元素,实际最多只需要遍历n/2个元素就好了。虽然复杂度依然是O(n)的,但当元素个数没有超过一定限制的时候,平均比动态数组的O(n)快。

另外,对于链表来说,插入操作性能消耗点:
第一,寻址过程;
第二,不断new新的节点过程。
双向循环列表带来的寻址过程的优势,只有在一定数量级内才会体现出来。

递归

递归算是链表和树这类数据结构中应用最为广泛的一种实现方式。下图展示在链表中删除某一个元素的递归微观过程。


递归删除链表中元素

树结构

基本介绍

局限性:元素必须有可比性。

在满二叉树情况下,因为节点个数n与树的高度h存在2的h次方等于n的关系,所以增,删,查都是O(logn)级别,假如以2为底,操作次数之间的差别如下:

num log(n) n 相差倍数
16 4 16 4
1024 10 1024 100
100万 20 100万 5万

注意点:
对于树结构,删除操作需要找寻后继元素,移除最小元素,这两个操作也是Olog(n)级别。

java中的TreeSet,底层基于红黑树进行实现,保证了添加元素后不会退化成链表而影响性能。

完全二叉树:元素都是从最左边开始码放。

二分搜索树

任意节点左子树的值都小于节点值,右子树的值都大于节点值。

缺点:在极端情况下,有可能退化成链表。
之所以高效,是因为在每次查询的时候都能去除一半的数据。

查询元素:涉及到前序遍历,中序遍历,后续遍历,层序遍历。

删除元素:分三种情况来讨论,删除节点的左子树为空,删除节点的右子树为空,删除节点的左右子树都不为空。


二分搜索树

平衡二叉树

定义:最大深度和最小深度相差为1。

AVL树

二分搜索树在特殊的情况下会退化成链表,为了维持树的自平衡性,科学家们发明了AVL自平衡树。

特点如下:
1.满足二分搜索树所有性质;
2.带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1。

反例说明

trie

trie是一种多叉树,因为多个指针(假设为n)的缘故,一次查看操作就会去除 n-1/n 数据。
缺点:空间消耗

2-3树

1.满足二分搜索树基本性质。
2.二节点存放两个元素。
3.三节点存放两个元素,有三个孩子。
4.三节点,左孩子节点小于父亲节点中的最小值,中孩子节点介于父亲节点左右节点中,有孩子节点大于父亲节点中任意节点。

2-3树

绝对平衡树:从根节点到任意一个叶子节点所经过的节点数量一定是相同的。2-3树是一颗绝对平衡树

由于水平有限,如有错误,欢迎指出,后续还会不断完善。本文图片转自慕课网玩转数据结构课程,侵删

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容

  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 5,096评论 0 12
  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 5,786评论 0 13
  • 六 “这最后五十个煤球是送到你学校附近的计生招待所,送完我带你们去忠义潭洗澡吧。”大牛边拉着空了大半的平板车边说:...
    武功山下阅读 214评论 0 0
  • 我: 看来帮忙须谨慎。想着反正也是要报课,x妈年前就跟我说要转课给源源来着,当时没好马上答应。我是都可以,如果老师...
    静开阅读 172评论 0 0
  • 这两天有点懒散了,一早起来送儿子去坐机场大巴去机场,返回后,实在太困就休息了两个多小时,什么事都不想做就想睡觉...
    涓涓细流_a9bf阅读 102评论 0 0