数据结构(数组结构、链表结构)

本来第一篇文章准备写点关于map的,但是考虑到map中可能也牵扯到数据结构,所以先随便写点就当做铺垫吧!

数据结构: 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合

1.集合
数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系;
2.线性结构
数据结构中的元素存在一对一的相互关系;
3.树形结构
数据结构中的元素存在一对多的相互关系;
4.图形结构
数据结构中的元素存在多对多的相互关系。

常见的数据结构:数组、队列、栈、链表、树、图、堆、散列表

1.数组:就是在内存中开辟一个连续的空间存放元素,就相当一群人站成一队,从第一个开始编号001,002....可以轻松的通过号码来找到对应的人,但是如果中间有一个人离队了(中间加了一个人),后面的人号码都要向前(向后)移动,如果队伍很长改的变得就越多,所以数组的特点就是:元素类型是固定的、长度是固定的、通过角标查询,查询快,增删慢。

2.队列: 线性结构,先进先出,就跟一群人排队过水管,先进水管的人的人先出去,后进水管的人后出去 数据结构(数组结构、链表结构)_第1张图片
如果你需要删除的话只能从出口一个个按顺序的删除,如果需要添加的话只能从入口一个个按顺序的添加,底层实现用的是LinkedList

3.栈:也是线性结构,先进后出,就跟手枪上子弹一样,先上的子弹会被后上的子弹压到下面,打枪的时候最后上的子弹会第一个打出来,这个就是大家常说的压栈,底层实现同样用的是LinkedList
数据结构(数组结构、链表结构)_第2张图片

4.链表:
链表的类型有多种:单链表,双链表,有序链表
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。
可以这样理解:
有一条街,小明住在街中一角,他有小红的地址,然后小红也是住在这条街,她有小花的地址,同样小花也有别人的地址。某天我想找小红玩,但是我不知道她住哪里,我可以问小明,就知道小红住在哪里了。那么小明小红小花这些人之间的关系就组成一个链表。


单链表:
就是小明只是右手握着小红的地址,他只有小红一个人的地址

双链表:
就是小明左手握着小白的地址,右手握着小红的地址,他有两个人的地址

循环链表:
就是小明握有小红的地址,小红握有小花的地址,而小花又握有小明的地址,这样就形成了一个循环

有序链表:
以某个标准,给链表的元素排序,比如比较内容大小、比较哈希值等

链表与数组比较:
优点:链表不需要确定长度大小,也不需要连续的内存空间,
缺点:由于不是连续的空间,所以查找元素比较吃力;相比数组只存储元素,链表的元素还要存储其它元素的地址,内存开销相对增大。

你可能感兴趣的:(JAVA基础)