内存结构:链表也是数据结构的一种,但是和数组不一样,数组在内存中每个节点的位置是相连的。而链表的每个节点在对象中是分散的,依靠引用相连。
优点1:单链表在增加和删除上要比数组结构更加快捷。
原因:因为顺序表在内存中是相连的,所以删除一个节点,在该节点之后的节点都要随之前移,所以效率不高。
而单链表使用引用彼此相连的,所以在删除增加时只需给引用重新赋值即可。所以效率会比较高
优点2:单链表可以无限增加,而数组在创建是就已经被固定了大小
缺点:因为单链表必须依靠引用来找到下一个节点,所以在做搜索时的效率会比较差。而顺序表在做搜索时的效率会比较高。
综上所述:如果需要快速访问数据,很少或不插入和删除元素,就应该用数组;相反, 如果需要经常插入和删除元素就需要用链表数据结构了。
接下来就是代码了,
节点的定义:
class Node{
int value;
int n; //节点编号
Node next,pre;
Node(){
value = 0;
next = null;
pre = null;
}
Node(int v){
value = v;
next = null;
pre = null;
}
public void setValue(int value){
this.value = value;
}
public int getValue(){
return value;
}
}
链表的实现:
public class LinkList{
private int size = 0; //用于描述链表长度
Node lastNode = new Node(); //用于分辨最后一个节点
Node headNode = new Node();
public boolean add(Node node){ //增加节点
if(size == 0){ //插入第一个节点时
headNode.next = node;
lastNode = node;
lastNode.pre = headNode;
size ++;
lastNode.n = size;
return true;
}
else{
lastNode.next = node;
node.pre = lastNode;
lastNode = node;
size ++;
lastNode.n = size;
return true;
}
}
public void add(int index, Node node){ //在指定位置插入节点。
Node temp = new Node(); //临时节点,用于顺序查找
temp = headNode.next;
for(int i = 1; i < index; i++){ //查找指定位置节点
temp = temp.next;
}
temp.pre.next = node; //进行插入操作
node.next = temp;
node.pre = temp.pre;
temp.pre = node;
size ++;
}
public boolean delete(int index){ //删除指定位置的节点。
if(index > size)
return false;
else
{
Node temp = new Node();
temp = headNode.next; //临时节点,用于顺序查找
for(int i = 1; i < index; i++){ //查找指定位置节点
temp = temp.next;
}
temp.pre.next = temp.next; //进行删除操作
temp.next.pre = temp.pre;
size --;
return true;
}
}
public Node get(int index){ //获取指定位置的节点
if(index > size)
return null;
else{
Node temp = new Node();
temp = headNode.next;
for(int i = 1; i < index; i++){
temp = temp.next;
}
return temp;
}
}
public boolean isEmpty(){ //检测该链表是否为空
if(this.size == 0)
return true;
else
return false;
}
public int size(){
return size;
}
}
该方法只定义了一些简单的增删改查功能。
ps:额,因为初写博客不久,所以可能会有不足,在这里与大家分享,有什么问题也希望大家多多指出啦!!!^-^