Java与数据结构(二) 单链表

来源:互联网 发布:淘宝达人怎么修改昵称 编辑:程序博客网 时间:2024/04/30 06:58

  链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1).

  Java代码实现如下:

package 数据结构和算法;class Node<E>{E data;//数值域Node next;//地址域Node(E element){this.data = element;}}public class List<E> {//头结点Node<E> head;int i;//设置一个空的头节点List(){head = new Node(0);i=1;}//设置一个有数值的头结点List(E data){head = new Node(data);i=1;}//插入一个元素,在index个元素后面添加elementvoid Insert(int index, E element){Node node = new Node(element);Node current = head;for(int j=1;j<index;j++){current = current.next;}node.next = current.next;current.next = node;i++;}//删除一个元素void Remove(int index){Node current = head;if(index==1){head = head.next;i--;}//删除头节点else{for(int j=1;j<index-1;j++){current = current.next;}Node Temp = current.next;current.next=Temp.next;i--;}}//在末尾插入一个元素void Add(E element){Insert(i,element);}//返回链表元素个数int ReturnSize(){return i;}//打印链表所有元素void Print(){Node node = head;for(int j=1;j<i;j++){System.out.print(node.data+" ");node = node.next;}System.out.println(node.data);}public static void main(String[] args){List L1 = new List(1);List L2 = new List(11);for(int i=2;i<=10;i++)L1.Add(i);L1.Print();L1.Insert(1, 1.5);L1.Print();L1.Remove(1);L1.Print();}}
OutPut:

1 2 3 4 5 6 7 8 9 10
1 1.5 2 3 4 5 6 7 8 9 10
1.5 2 3 4 5 6 7 8 9 10