概述
1、什么是数据结构
- 数据结构是计算机存储、组织数据的方式。
- 指相互之间存在一种或多种特定关系的数据元素的集合。
- 通常情况下,合适的数据结构可以提高运行速度或者存储效率。
- 数据结构往往同检索算法和索引技术有关
2、常用的数据结构有哪些?
- 主要有这8种基本结构
- 数组,栈,链表,队列,树,图,堆,散列表等
3、每种数据结构都有优缺点,看当前最适合什么
数组—查询快,增删慢
- 优点:
- 查询快——数组的地址是连续的,通过数组的首地址可以找到数组,通过数组的索引可以快速查找某一个元素
- 缺点:
- 数组的长度是固定的,固定后无法扩容
- 数组只能存储一种类型的数据
- 增删慢——我们想要增加/删除一个元素,必须创建一个新数组,把源数组的数据复制过来,故在堆内存中,频繁的创建数组,复制数组中的元素,销毁数组,造成效率低下。
栈–先进后出
描述
- 只能栈顶操作,不能栈底操作
- 从栈顶放入元素叫入栈,取出元素叫出栈
- 吃了吐(特点)
适用场景:
- 应用于实现递归功能的场景,例如:斐波那契数列
队列–先进先出
描述
- 可以在一端放入数据,另一端取出
- 放入元素称为入队,取出元素称为出队
适用场景:
- 多线程阻塞队列管理
链表—查询慢,增删快
描述:
- 链表是物理存储单元上非连续的、非顺序的存储结构,
- 数据元素的逻辑顺序是通过链表的指针地址实现,
- 每个元素包含两个结点,一个是存储元素的数据域 (内存空间),另一个是指向下一个结点地址的指针域。
- 根据指针的指向,链表能形成不同的结构,例如单链表,双向链表,循环链表等
链表结构:
-
1)单向链表:
- 链表中只有一条链子,不能保证元素的顺序(存储和取出的顺序可能不一致)
-
2)双向链表:
- 链表中有两条链子,有一条链子是专门记录元素的顺序,是一个有序的集合
优缺点:
-
优点:
- 增删快:链表结构,增删一个元素,对链表的整体结构没有影响,只需改变前后两个元素节点的指针指向地址
- 不需要初始化容量,可以任意加减元素
-
缺点:
- 查询慢:链表中地址不是连续的,每次查询元素,都必须从头开始查询
- 含有指针域,占用空间
适用场景:
- 数据量较小,需要频繁增删操作
树
描述:
- 树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。
- 把它叫做 “树” 是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
特点:
- 每个节点有零个或多个子节点;
- 没有父节点的节点称为根节点;
- 每一个非根节点有且只有一个父节点;
- 除了根节点外,每个子节点可以分为多个不相交的子树;
常见结构:
- 二叉树
- 平衡树
- 不平衡树
- 排序树
- 红黑树
图
以下待定