数据结构详解(6大常见数据结构)

数据结构详解(6大常见数据结构)-mikechen

学习数据结构更有利于了解程序的背后实现,下面我就重点详解常见的6大数据结构@mikechen

常见的数据结构有哪些?

数据结构主要包含如下6类:

数据结构详解(6大常见数据结构)-mikechen

数组

数组是一种最常见的数据结构,用来存储同一类型的集合。

每个数组元素可以通过一个下标来访问它们,具体如下图所示:

数据结构详解(6大常见数据结构)-mikechen

数组的特点:

1)在内存中申请一块连续的空间;

2) 数组下标从 0 开始;

3) 数组的类型只能是一个,且固定,在申明时确定;

4) 数组按照索引查询元素,速度很快,时间复杂度为O(1);

5)添加、删除元素的操作很耗时间,因为要移动其他元素,时间复杂度为O(n)。

 

链表

链表是一种由节点(Node)组成的线性数据集合,每个节点通过指针指向下一个节点,它是一种由节点组成,并能用于表示序列的数据结构。

链表结是由许多节点构成的,每个节点都包含两部分,如下图所示:

数据结构详解(6大常见数据结构)-mikechen

1)数据部分:保存该节点的实际数据;

2)地址部分:保存的是上一个或下一个节点的地址。

 

链表具有如下特点:

  • 虽然时线性表,结点之间也是有顺序的,但是根据位置访问元素时间复杂度很高;
  • 链表不需要连续内存,整体来讲对内存比较友好;
  • 根据某个结点可以直接访问到其后继结点,或前继结点(双向链表);
  • 链表是由多个结点构成,但一般只存储头结点或者头尾结点,元素不支持随机访问,只能顺序遍历访问;
  • 通常来讲链表的插入和删除比数组高效(但也得分情况)。

 

链表的分类如下:

1.单链表:每个节点仅指向下一个节点,最后一个节点指向空(null)。

具体如下图所示:

数据结构详解(6大常见数据结构)-mikechen

 

2.双链表:每个节点有两个指针p,n。p指向前一个节点,n指向下一个节点;最后一个节点指向空。

具体如下图所示:

数据结构详解(6大常见数据结构)-mikechen

 

3.循环链表:每个节点指向下一个节点,最后一个节点指向第一个节点。

具体如下图所示:

数据结构详解(6大常见数据结构)-mikechen

 

栈:栈是一种计算机系统中的数据结构,它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶。

如下图所示:

数据结构详解(6大常见数据结构)-mikechen

是一个元素集合,支持两个基本操作:push用于将元素压入栈,pop用于删除栈顶元素。

栈的操作常用的有:进栈(PUSH),出栈(POP)。

1.进栈(PUSH)

PUSH:将目标内存推入栈顶。

 

2.出栈(POP)

POP:从栈顶中移除目标。

 

哈希表

哈希表,英文名为:Hash表,也称散列表,是根据键值而直接进行访问的数据结构。

哈希表它通过把键值(key-value)映射到表中一个位置来访问记录,以加快查找的速度,这个映射函数叫做散列函数,存放记录的数组叫做散列表。

数据结构详解(6大常见数据结构)-mikechen

大家最熟悉经典的HashMap就是采用哈希表的结构:

数据结构详解(6大常见数据结构)-mikechen

 

队列

队列是一种操作受限的线性表,只允许在表的前端(front)进行删除操作又称作出队,在表的后端进行插入操作,称为入队,符合先进先出(First in First out)的特性,在队尾插入元素叫做入队,对头删除元素叫做出队。

如下图所示:

数据结构详解(6大常见数据结构)-mikechen

队列是一个元素集合,支持两种基本操作:用于添加一个元素到队列,用于删除队列中的一个元素,是先进先出的数据结构。

具体分类如下图所示:

数据结构详解(6大常见数据结构)-mikechen

 

二叉树

数据结构详解(6大常见数据结构)-mikechen

二叉树是一个树形数据结构,每个节点最多可以有两个子节点,称为左子节点和右子节点。

二叉树特征:

数据结构详解(6大常见数据结构)-mikechen

  1. 一棵树至少会有一个节点(根节点);
  2. 树由节点组成,每个节点的数据结构是这样的:一个数据、两个指针(如果有节点就指向节点、没有节点就指向null);
  3. 二叉树中,第 i 层最多有 2^( i-1)个结点;
  4. 如果二叉树的深度为 K,那么此二叉树最多有 2^K-1 个结点;

 

二叉树大致分为以下几类:

1.满二叉树(Full Tree):二叉树中的每个节点有 0 或者 2 个子节点。

数据结构详解(6大常见数据结构)-mikechen

 

2.完全二叉树:二叉树中除最后一层外其他各层的节点数均达到最大值,最后一层的节点都连续集中在最左边。

完全二叉树是由满二叉树而引出来的,如下图所示:

数据结构详解(6大常见数据结构)-mikechen

 

完全二叉树与满二叉树的区别

完全二叉树除最后一层,其它层都是满结点的,这就是完全二叉树与满二叉树的区别所在。

满二叉树最后一层都是满节点的,而完全二叉树不是。

 

3.二叉查找树:二叉查找树(BST)是一种二叉树。其任何节点的值都大于等于左子树中的值,小于等于右子树中的值。

 

 

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法