4.1链表

数据存储在节点(node)中,对于链表而言,有2部分

1 class Node{
2         public E e;       //一部分存储真正的数据
3         public Node next;   //另一部分,next是Node类型的对象,换言之,next本身又是一个节点,next指向的是当前节点的下一个节点。
4 }

对于链表来说就像火车一样,每一个节点其实就是一节车厢,在车厢中存储真正的数据,而车厢和车厢之间还要进行连接,以使得数据是整合在一起的,用户可以方便的在所有数据上进行查询等其他的操作,那么数据和数据之间的连接就是有next来完成

链表优点:真正的动态,不需要处理固定容量的问题。

缺点:丧失了随机访问的能力。每一个节点所在的内存的位置是不同的。

1 //创建一个类LinkedList,目的是在LinkedList中实现链表数据结构。要求支持泛型,在LinkedList后加上<E>
2 public class LinkedList<E> { 
3 
4     ......
5 
6 }
 1 public class LinkedList<E> {      //在LinkedList中实现链表数据结构。要求支持泛型,在LinkedList后加上<E>
 2     //链表是由一个一个节点所组成的,数据存储在节点(node)中,对于链表而言,有2部分
 3     private class Node{  //将节点Node设置成LinkedList的内部类,同时这个Node设置成私有的,换言之,只有在链表这个数据结构内可以访问node,而在链表这个结构外是无法访问到node的。
 4         //定义Node变量
 5         public E e;       //一部分存储真正的数据
 6         public Node next;   //另一部分,next是Node类型的对象,换言之,next本身又是一个节点,next指向的是当前节点的下一个节点。
 7         //构造函数
 8         public Node(E e, Node next){     //构造函数的2个参数和Node节点中传来变量的2个变量名重名( public E e和public Node next),所以需要写this.e, this.next,表示节点所拥有的
 9             this.e = e;   //将当前的节点e赋值成用户传来的e,其中左边this.e表示节点的e,等号右边是用户传来的e
10             this.next = next;//将当前节点的next赋值成用户传来的next
11         }
12 
13         public Node(E e){
14             this(e, null);
15         }//  构造函数,如果用户只传来一个e,此时就调用具有2个参数的构造方法,第一个参数传用户传来的e,第二个参数赋值为空
16 
17         public Node(){
18             this(null, null);
19         } //构造函数,如果用户什么都不传
20 
21         @Override     //对于链表的每一个节点来说,相应的设置一个他们父类对应的toString函数,来方便后期打印输出
22         public String toString(){
23             return e.toString();
24         }
25     }
26 
27 }

猜你喜欢

转载自www.cnblogs.com/make-big-money/p/10318665.html