数据结构的醍醐灌顶
java常用基本数据结构类型:
1.线性结构:数组,链表,队列,栈(一对一)
2.非线性结构:tree(一对多)
个人理解:不论是线性结构还是非线性结构,都是对数据存储方式的不同描述而已,数据存储在内存中(包含:数据 + 地址 ),而为了便于理解,我们将其抽象画为线性结构(数组,链表,队列,栈)非线性结构(tree)。便于我们使用java面向对象的思想来操作内存数据。
数组---------
一块连续的大块内存(按数据类型和容量划分的等份内存小块),第一小块的默认下是0,以此类推
链表---------(栈,队列)
a.单向链表:有一个头结点(head),支持头节点的插入和删除,这种特性和栈的特性非常相似,栈的插入和删除都是在栈头进行的,栈的特性就是"先进后出",和单向链表非常相似,我们完全可以用单向链表来实现栈的功能。
a.单向链表的缺点:如果想在单向列表尾端出入数据的话,就需要遍历到最后一个数据进行插入,费时,双向列表解决了这个问题。
b.双端链表:有一个头结点(head),有一个尾结点(tail),支持头节点的插入和尾结点的删除,这种特性和队列的特性非常相似,队列的特性是"先进先出",和双端链表非常相似,我们可以使用双端列表来实现队列的功能。
b.双端链表和单向链表的缺点:数据的查询只能从头到尾(因为当前结点只持有下一个结点的引用),费时,双向列表解了这个问题。
c.双向列表:有一个头结点(head),有一个尾结点(tail),当前结点持有下一个结点的引用和上一个节点的引用,因此我们可以正向遍历也可以反向遍历
树----------
我们大胆的想象一下,树其实就是指有一个单向链表,然后每单向链表的每一个结点又是另一个单向链表的头结点,也就是说树就是由许多的单向链表组成的,每个结点包含了一个引用集合。这就是tree