数组
(1)连续内存空间
(2)相同数据类型
优点:知道下标可以快速查询内容
链表
(1)内存空间可以不连续
(2)有指向下一个数据元素的地址指针
优点:插入、删除操作简单
Hash表
以K-V方式存储,Hash 表的物理存储其实是一个数组,如果我能够根据 Key 计算出数组下标,那么就可以快速在数组中查找到需要的 Key 和 Value。最简单的Hash方法是余数法。一旦发生 Hash 冲突,只需要将相同下标,不同 Key 的数据元素添加到这个链表就可以了。查找的时候再遍历这个链表,匹配正确的 Key。
栈
数组和链表都被称为线性表,因为里面的数据是按照线性组织存放的,每个数据元素的前面只能有一个(前驱)数据元素,后面也只能有一个(后继)数据元素,所以称为线性表。
栈是在线性表的基础上加了这样的操作限制条件:后面添加的数据,在删除的时候必须先删除,即通常所说的“后进先出”。
队列
队列也是一种操作受限的线性表,是先进先出。
树
数组、链表、栈、队列都是线性表,也就是每个数据元素都只有一个前驱,一个后继。而树则是非线性表,树是这样的。
推荐:极客时间《数据结构与算法之美》和《算法训练营》