任务背景
数据结构是计算机存储、组织数据的方式,它研究的是如何构造复杂软件系统的根基,它的核心内涵是分解与抽象,并得到软件开发过程中需要用到的逻辑结构。用简单直白的话来说,就是同样的数据,在某些场景下,用数组会比用链表好,而在另一些场景下,可能用LIFO(Lastin,Firstout,后进先出)队列就是最合理的了。
任务目标
了解常用的数据结构及其分类
理解不同的数据结构所适用的不同场景
任务训练
数组(Array):它是将具有相同类型的若干数据组织在一起的集合,这是一种最基本而且也是一种最经常使用的数据结构
栈(Stack):一种特殊的线性表,只能在一个表的固定端进行数据节点的插入和删除操作,栈正是一种按照后进先出(LIFO)的原则来存储数据的数据结构
队列(Queue):和栈类似,但不同的是,它是在一端执行入队操作,而在另一端进行出队操作
链表(LinkedList):它和数组一样,也是一组数据的集合,但和数组不一样的是,它并不是一组连续的数据集合,而是通过指针连接在一起的
树(Tree):这是一种典型的非线性结构,之所以叫做“树”,是因为它的结构看起来就像一颗倒过来的树,它只有一个根结点,但可以有多个后继节点
堆(Heap):它是一种特殊的树型结构,它的特点是根结点的值是所有节点中最大或者最小的,而且根结点的子节点也是一个堆结构
图(Graph):这也是一种非线性数据结构,在图结构中,数据节点称为顶点,顶点之间的连线称为边
散列表(Hash):这种数据结构来源于散列函数,它的思想是如果存在x,那么就必然有一个唯一的存储位置f(x)可以找到x,这样通过数学函数就直接计算出x的存储位置而不用在进行比较、查找以后才知道
按照最大堆或最小堆的定义,根结点总比子节点大为最大的堆
根结点总比子节点小为最小的堆
所谓AVL树,就是对于任意一个节点来说,它的左子树比它小,它的右子树比它大;而且任意节点的子节点之间高度差距最大为1