链表的实现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表的实现相关的知识,希望对你有一定的参考价值。
内存结构:链表也是数据结构的一种,但是和数组不一样,数组在内存中每个节点的位置是相连的。而链表的每个节点在对象中是分散的,依靠引用相连。
优点1:单链表在增加和删除上要比数组结构更加快捷。
原因:因为顺序表在内存中是相连的,所以删除一个节点,在该节点之后的节点都要随之前移,所以效率不高。
而单链表使用引用彼此相连的,所以在删除增加时只需给引用重新赋值即可。所以效率会比较高
优点2:单链表可以无限增加,而数组在创建是就已经被固定了大小
缺点:因为单链表必须依靠引用来找到下一个节点,所以在做搜索时的效率会比较差。而顺序表在做搜索时的效率会比较高。
综上所述:如果需要快速访问数据,很少或不插入和删除元素,就应该用数组;相反, 如果需要经常插入和删除元素就需要用链表数据结构了。
接下来就是代码了,
节点的定义:
接下来就是代码了,
节点的定义:
1 class Node{ 2 int value; 3 int n; //节点编号 4 Node next,pre; 5 Node(){ 6 value = 0; 7 next = null; 8 pre = null; 9 } 10 Node(int v){ 11 value = v; 12 next = null; 13 pre = null; 14 } 15 public void setValue(int value){ 16 this.value = value; 17 } 18 public int getValue(){ 19 return value; 20 } 21 }
链表的实现:
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:额,因为初写博客不久,所以可能会有不足,在这里与大家分享,有什么问题也希望大家多多指出啦!!!^-^
以上是关于链表的实现的主要内容,如果未能解决你的问题,请参考以下文章