链表

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

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

链表:在表头插入删除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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值