一.栈:
1.栈好比一个容器,就是用来存储数据的。
2.栈的特点:后进先出,先进后出->进栈方向以及出栈方向都是栈顶
3.数据进入栈模型的过程称为:压栈/进栈
4.数据离开栈模型的过程称为:弹栈/出栈
5.Java模型中:
6.栈图:
二.队列:
1.队列可以用来存储数据。
2.队列图:
3.队列的特点:先进先出,后进后出
4.数据从后端进入队列模型的过程称为:入队列
5.数据从前端离开队列模型的过程称为:出队列
三.数组:
1.查询数据的速度快:查询数据通过地址值和索引定位,查询任意数据耗时相同(查询数据的速度快是因为元素在内存中是连续存储的,都在一个地址上)
2.删除数据的效率低:要将原始数据删除,同时后面每个数据前移
3.添加数据效率极低:添加位置后的每个数据后移,再添加要添加的元素
4.数组是一种查询快,增删慢的模型
四.链表:
1.链表中的专业名词:
a.链表中的每一个元素称为结点;
b.每一个结点都是一个独立的对象;
c.
d.第一个结点称为头结点
2.链表中的结点是独立的对象,在内存中是不连续的,每个结点包含数据值和下一个结点的地址。(链表的元素是游离的)
3.链表举例:
4.链表查询数据慢,无论查询哪个数据都要从头开始往后找。
比如上图中要查找C,但此时只有A知道C的地址值,A的地址值又只有head(头结点)知道,导致要从头开始找,效率低
5.链表增,删数据相对快(操作地址即可):-->对比数组
a.比如上图中要在数据A和C之间添加一个数据B,此时只需要创建一个新结点,假设地址为54
(^代表还没连接)
b.比如删除数据B,D之间的数据C
6.单向链表与双向链表:
a.双向链表的效率比单向链表的高;
b.比如要查找第N个元素:
对于单向链表,只能从头结点开始,一个一个往后找;
对于双向链表,此时会先判断第N个元素离头近还是离尾近->如果离头近,从头开始一个一个往后找,
如果离尾近,从尾开始一个一个往前找