链表和数组都是应用广泛的通用存储结构
数组:无序数组搜索效率低,有序数组插入效率低,数组创建后大小不可改变
链表:在表头插入删除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();
}
}