单链表:
单链表由于数据元素的存储空间一般不是连续的,因此为了完善单链表的逻辑结构,其中每一个数据元素必须由两部分构成:一部分是数据元素中的数据值,另一部分是数据元素的地址值。
这两部分信息构成了单链表的一个节点。因此,每个节点的存储位置是任意的,即存储位置是无序的,(虽然说是无序的,但是由链表的结构决定了,链表存储的数据是有序的)
每个节点的结构都是(data, next) , 节点中有两个部分:data和next。data区域存放该节点的值,next部分存放下一节点的地址。
public class Node {
String data;//数据域
Node next;//链域
public Node(String data) {
this.data = data;
next = null;
}
}
数组和链表的区别
数组的存储空间是静态的,连续分布的,初始化的过程会造成空间浪费,过小右会是空间溢出的机会增多。
链表的存储空间是动态分布的,只要内存空间尚有空闲,就不会产生溢出;链表中每个节点除了域值外,还有链域(先一个节点的地址),这样空间利用率会变高。
数组中插入和删除节点,平均要移动一半的节点;而链表在插入和删除操作总是移动指针。
所以,数组查询快,插入和删除慢;链表,查询慢,插入和删除快;
静态数组从栈中分配空间,对于程序员方便快捷,但是*度小。链表从队中分配空间,*度大但是申请管理比较麻烦。(这里还有 不懂的地方,后续会不补上)
数组中的数据在内存中按顺序存储的,而链表是随机存储的!
要访问数组中的元素可以按下标索引来访问,速度快,如果对他进行插入操作的话,就得移动很多元素,所以对数组进行插入操作效率很低!
由于链表是随机存储的,链表在插入,删除操作上有很高的效率(相对于数组),如果要访问链表中的某个元素的话,就得从链表的头逐个遍历,直到找到所需要的元素为止,所以链表的随机访问的效率就比数组要低。