[Java]栈-数组-队列-链表知识框架

1.栈:后进先出,先进后出
数据进入栈模型的过程:压入栈,入栈操作
数据从栈中取出的过程:弹栈,出栈操作
我们一般是栈顶元素先出去 你可以理解成栈是一个弹夹 最先压进去的子弹最后被打出来
因此就会有一个叫做栈内存的东西->方法运行的时候进栈,运行结束后出栈区
就会有栈顶元素和栈底元素
2.队列:
队列分为后端和前端,队列特点:先进先出,后进后出。
数据从后端进队列的过程:叫入队列
数据从前端出队列的过程:叫出队列
如果说栈是一个杯子 那么队列就是一个通风管 有点像排队买票
3.数组:
我们会通过地址值找到数组 然后通过数组的索引进行定位 查询任意数据的速度是相同的
因为数组其实是一个连续的空间
弊端:删除效率低,原始数据删除,后面的数据要重新移动位置
因此我们可以总结数组这个数据类型:查询快,增删慢
这里的查询快就是基于数组是一个连续的空间储存的 找到了头元素的地址后面只需要按照索引寻找就可以了
a.查询速度快
b.插入和删除的效率极低(因为你需要移动其附近的元素)
4.链表
我们刚刚提到了数组的缺陷,因此我们找到了数组的对立面->链表
链表是由结点(node)组成的
创建一个链表:
首先要创建一个头节点+空地址
链表中的每一个结点都是一个独立的对象,在内存当中是不连续的,每个结点包含的数据域和指针域
所以说:链表的查询非常慢,但是增删很快。
我们引入一个概念:双向链表:
我们先前提到了,单向链表由数据域和指针域构成,如果说我希望查询某一个结点的位置
需要从头结点往后查询,这种查询方式无疑是比较慢的
但是我们可以引入一个新的概念:双向链表,我们将数据域细分为两个组分
一个指向前驱 一个指向后继 在查询位置的时候 我们可以先判断结点离头结点近 还是离末尾结点近
从而大大提高我们的查询效率

你可能感兴趣的:(java,链表,开发语言)