含义:数据结构是相互之间存在着一种或多种特定关系的数据元素和数据元素之间关系的集合
算法:算法是解决特定问题求解步骤的描述,在计算机种表现为指令的有限序列,并且每条指令表示一个或多个操作。
数据结构的分类:
常用的数据结构有:数组,链表,队列,栈,树,图,堆,散列表。
数组:
数组是可以在内存中连续存储存储多个元素的结构,在内存的分配上也是连续的。
优点:按照索引查询的速度快
按照索引遍历数组更方便
缺点:数组长度确定后就已经固定了,无法扩容
只能存储一种数据类型的数据
添加和删除数据速度慢
使用场景:适合用于对数据需要频繁查询且很少添加和删除的情况。
链表:
链表在物理存储上是不连续的,非顺序的存储结构。数据元素的逻辑顺序是依靠链表的指针地址实现。每个元素包含两个节点,一个是数据域,另一个是指针域。根据指针的指向链表可以分为单向链表,双向链表,循环链表。
优点:链表不需要初始化数据,可以任意加减元素
链表添加和删除元素只需要修改前后两个指针的指向地址就行,所以添加和删除元素比较方便。
缺点:查询数据需要遍历链表所以查询数据元素比较慢。
因为存有指针空间,所以造成大量的空间浪费。
使用场景: 数据量较小,需要频繁添加和删除数据元素
栈:
栈是一种线性结构,它只能在栈顶对数据元素进行操作,它最显著的特点是,先进后出。
队列:
队列也是一种线性结构,它能在队列的两端进行操作,有点类似于食堂排队打菜,它的特点是先进先出。
使用场景:因为队列的先进先出的特点,因此在多线程阻塞队列管理中非常适合。
树:
树是一种数据结构,它是n个有限节点具有层次关系的集合。把它叫做树是因为它的结构像一颗倒挂的树。
特点:每个节点有零个或多个子节点
没有父节点的节点叫根节点
除了根节点外每个节点有且只有一个父节点
除了根节点外,每个子节点可以分为多个不相干的子树
二叉树:
二叉树是树的一种它还有很多衍生的数据结构,例如平衡二叉树,完全二叉树,满二叉树,B+树,红黑树。
特点:每个结点最多有两颗子树,结点的度最大为2
左子树和右子树是有顺序的,次序不能颠倒。
即使某个结点只有一个子树,也要区分左右子树。
二叉树是一种比较折中的数据结构方案,它添加和删除元素都很快,在查找方面也有很多优化的算法。所以二叉树既有链表易于添加和删除元素的优点,也有数组易于查询的好处,是两者的优化方案,在处理大批量打动态数据方面非常有用。