链表

来源:互联网 发布:马库斯坎比数据 编辑:程序博客网 时间:2024/06/07 06:40

链表和数组都是应用广泛的通用存储结构

数组:无序数组搜索效率低,有序数组插入效率低,数组创建后大小不可改变

链表:在表头插入删除O(1),平均插入、删除O(N)(与数组相比不需要移动元素),链表大小可扩展

一般链表

package datastructure.c5.linklist.def;public class Link {public int iData;public double dData;public Link next;public Link(int id,double dd){iData=id;dData=dd;}public void displayLink(){System.out.print("{"+iData+","+dData+"}");}}

package datastructure.c5.linklist.def;public class LinkList {private Link first;public LinkList(){first=null;}public void insertFirst(int id,double dd){Link newLink=new Link(id, dd);newLink.next=first;first=newLink;}public Link find(int key){Link current=first;while(current.iData!=key){if(current.next==null){return null;}else{current=current.next;}}return current;}public Link delete(int key){Link current=first;Link previous=first;while(current.iData!=key){if(current.next==null){return null;}else{previous=current;current=current.next;}}if(current==first){first=first.next;}else{previous.next=current.next;}return current;}public void displayList(){System.out.print("List (first-->last):");Link current=first;while(current!=null){current.displayLink();current=current.next;}System.out.println("");}}

package datastructure.c5.linklist.def;public class LinkListApp {public static void main(String[] args) {LinkList theList=new LinkList();theList.insertFirst(22, 2.99);theList.insertFirst(44, 4.99);theList.insertFirst(66, 6.99);theList.insertFirst(88, 8.99);theList.displayList();Link f = theList.find(44);if(f!=null){System.out.println("Found link with key "+f.iData);}else{System.out.println("Can't find link");}Link d = theList.delete(66);if(d!=null){System.out.println("Deleted link with key "+d.iData);}else{System.out.println("Can't delete link");}theList.displayList();}}

双端链表

package datastructure.c5.linklist.firstlast;public class Link {public long dData;public Link next;public Link(long d){dData=d;}public void displayLink(){System.out.print(dData+"  ");}}

package datastructure.c5.linklist.firstlast;public class FirstLastList {private Link first;private Link last;public FirstLastList(){first=null;last=null;}public boolean isEmpty(){return first==null;}public void insertFirst(long dd){Link newLink=new Link(dd);if(isEmpty()){last=newLink;}newLink.next=first;first=newLink;}public void insertLast(long dd){Link newLink=new Link(dd);if(isEmpty()){first=newLink;}else{last.next=newLink;}last=newLink;}public long deleteFirst(){long temp = first.dData;if(first.next==null){last=null;}first=first.next;return temp;}public void displayList(){System.out.print("List (first-->last):");Link current=first;while(current!=null){current.displayLink();current=current.next;}System.out.println("");}}

package datastructure.c5.linklist.firstlast;public class FirstLastApp {public static void main(String[] args) {FirstLastList theList=new FirstLastList();theList.insertFirst(22);theList.insertFirst(44);theList.insertFirst(66);theList.insertLast(11);theList.insertLast(33);theList.insertLast(55);theList.displayList();theList.deleteFirst();theList.deleteFirst();theList.displayList();}}


0 0