基本数据结构(栈、队列、链表、树、堆)

栈##

栈是一种动态集合,它是一种LIFO(last in first out后进先出)结构
栈的实现
(1)数组
(2)链表
栈要记录的数据
(1)栈顶位置top
注意这个top有两种理解方式,一种是表示栈的最后一个数据的位置,另一种是表示栈的最后一个数据的下一个位置,这两种理解对栈的操作代码有一定的影响
(2)栈最大大小size
栈的操作
(1)STACK_EMPTY():判断栈是否为空
(2)PUSH(X):向栈中添加一个值,注意栈是否为满的
(3)POP():从栈中弹出一个值,注意栈是否为空

栈的简要实现github栈
栈的应用
(1)括号匹配问题

队列##

与栈不同,它是一种FIFO(first in first out先进先出)结构
队列的实现
(1)数组
(2)链表
队列要记录的数据
(1)队首位置head:第一个元素位置
(2)队尾位置tail:下一个元素要插入的位置(最后一个元素的下一个位置)
(3)队列最大大小size
队列的操作
(1)ENQUEUE(x):入队
(2)DEQUEUE():出队
(3)EMPTY():队列为空,head=tail
(4)FULL():队列为满,head=(tail+1)%size

队列

队列的简要实现github队列
队列的应用
(1)

链表##

与数组中元素地址连续不同,链表中两个元素地址不一定连续,而是由专门的一个指针指明该元素的后一个(前一个)元素的地址。
链表种类
(1)单向链表:只有指向后一个元素的指针
(2)双向链表:有指向后一个和前一个元素的指针
(3)循环链表:链表内存在一个环
链表节点(Node)记录的数据
(1)要存储的数据data
(2)下一个节点地址Node* next
(3)若是双向链表还要存储前一个节点地址Node prev
链表(LinkedList)记录的数据
(1)链表的头指针Node
head
(2)可能还记录链表的尾指针 Node* tail
链表的操作
(1)SEARCH(x):链表的搜索
(2)INSERT(i,x):链表的插入,在第i个位置插入x
(3)DELETE(x):链表的删除
哨兵(sentinel)
为了减少边界条件的判断(是否为空链表等等),引入哨兵,使得链表永远不为“空”。
指针和对象的实现
有些语言比如Java没有指针(C中就存在指针),这时我们需要考虑指针的替代实现方式。
(1)用二维数组表示指针
我们可以设置一个n*3的数组记录n个节点,那个3就表示存储的数据、前一个元素的坐标(index)和后一个元素的坐标。
(2)用一维数组表示指针

一维数组代替指针

树##

树的种类
(1)二叉树
二叉树要存储4个数据,分别是节点携带的信息和其父节点、左右子节点的指针。
(2)分支无限制的有根树:
上面二叉树每个节点最多有两个子节点,而分支无限制的有根数则没有这个限制,可能有3个、5个甚至更多子节点。所以存储这种数据结构的问题在于我们事先并不知道应该设置多少个child指针,若设置的少了不能满足要求,设置的过多又会浪费空间。所以这里提出一种新的描述这种数据结构的方法——左孩子右兄弟表示法,这种方法每个节点设置3个指针:父指针、从左数第一个孩子的指针、其右侧相邻的兄弟指针,如下图所示

左孩子右兄弟表示法

堆##

堆实际上是以数组形式存储的二叉树
堆需要存储的数据:
(1)数组的大小max-size
(2)堆元素个数size,这里size要小于max-size
堆中元素通过坐标来确定父节点、左右子节点,具体来说
一个节点i的父节点:[i/2]
一个节点i的左子节点:[i2]
一个节点i的右子节点:[i
2+1]
堆的分类
(1)最大堆
满足所有节点都比其父节点值小(小于等于)的堆
A[i/2]>=A[i]
(2)最小堆
满足所有节点都比其父节点值大(大于等于)的堆
A[i/2]<=A[i]
堆的操作
(1)维护堆的性质(HEAPIFY)
这里指维护最大堆或最小堆的性质。假设一个数组中下标为i的节点的子节点满足最大(小)堆性质,但自身不一定满足这个性质,这时就需要HEAPIFY,具体来说是要比较这个节点和其两个子节点的大小,将其中的大(小)的和该节点位置交换,这样这个节点及其两个子节点就满足最大(小)堆的性质了,但是可能交换后子节点不满足堆的性质,所以这里要递归调用HEAPIFY,直到达到最下层节点,这样就维护了堆的性质。HEAPIFY耗时O(lgn)
(2)建堆(BUILD-HEAPIFY)
从中间那个元素开始到第一个元素,逐一调用HEAPIFY函数,即可完成建堆。
逐一从中间那个元素开始递减而不是从第一个元素递增,这时为了保证每次调用HEAPIFY都能保证该节点的子节点都满足最大(小)堆的性质,否则无法调用HEAPIFY。中间那个元素是第一个可能不满足最大(小)堆性质的节点,所以从这里开始维护(HEAPIFY)。一个建堆的例子如下所示:[5,3,17,10,84,19,6,22,9]

建堆

建堆的期望时间为O(n)

堆的应用:
(1)堆排序(详见排序算法
(2)优先队列

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

推荐阅读更多精彩内容

  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 5,076评论 0 12
  • 本文内容取自于小甲鱼的数据结构与算法。http://www.jianshu.com/p/230e6fde9c75 ...
    阿阿阿阿毛阅读 2,870评论 0 7
  • 9.3.3 快速排序   快速排序将原数组划分为两个子数组,第一个子数组中元素小于等于某个边界值,第二个子数组中的...
    RichardJieChen阅读 1,833评论 0 3
  • 0.目录 1.优先队列ADT 2.几种实现 3.二叉堆 4.d-堆 5.左式堆 6.斜堆 7.二项队列 8.斐波那...
    王侦阅读 3,048评论 1 2
  • 风起尘落梧桐叶 日上枝头 稀有残红照 隔墙暖耳芙蓉闹 凭阑心安眠自扰 小憩片刻梦园道 梦里园外 一览花魁笑 笑面如...
    蜡笔小舅舅阅读 302评论 6 3