数据结构之链表Java实现

接口:

package linearList;

import org.omg.CORBA.OBJ_ADAPTER;

public interface ILiist {
	public void clear();// 置空表

	public boolean isEmpty();// 是否为空

	public int length();// 数据元素个数

	public Object get(int i) throws Exception;// 返回第i个数据元素的值

	public void insert(int i, Object x) throws Exception;// 在第i个数据元素之前插入一个值为x的数据元素

	public void remove(int i) throws Exception;//删除并返回第i个元素
	
	public int indexOf(Object x);//返回首次出现指定的数据元素的位序号,
	                             //若线性表不包含此数据元素,则返回-1
	
	public void display();//输出
	
}


结点类;

package linearList;

public class Node {//结点类
	public Object data;//存放节点值
	public Node next;//后继节点的引用
	
	//无参数时的构造函数
	public Node(){
		this(null,null);
	}
	
	//带一个参数时的构造函数
	public Node(Object data){
		this(data,null);
	}
	
	//带两个参数时的构造函数
	public Node(Object data,Node next){
		this.data=data;
		this.next=next;
	}
}

具体实现:

package linearList;

import java.util.Scanner;

import sun.reflect.generics.tree.VoidDescriptor;

public class LinkList implements ILiist{
	public Node head;//单链表的头指针
	
	public LinkList(){//单链表的构造函数
		head=new Node();//初始化头结点
	}
	
	//构造一个长度为n的单链表
	public LinkList(int n,boolean Order)throws Exception{
		this();//初始化头结点
		if(Order){
			create1(n);//尾插入方法顺序建立单链表
		}
		else{
			create2(n);//头插入方法逆位序建立单链表
		}
	}
	
	//尾插入方法顺序建立单链表,n为单链表的结点个数
	public void create1(int n)throws Exception{
		Scanner sc=new Scanner(System.in);
		for(int j=0;ji||p==null){//i小于0或者大于表长时,即i不合法
			throw new Exception("第"+i+"个元素不存在");//抛出异常
		}
		return p.data;//返回结点p的数据域值
	}

	//带头结点的单链表上的插入操作算法
	public void insert(int i, Object x) throws Exception{
		Node p=head;//初始化,p指向头结点
		int j=-1;//j是计数器
		while(p!=null&&ji-1||p==null){//i不合法
			throw new Exception("插入位置不合法");//抛出异常
		}
		Node s=new Node(x);//生成新结点
		s.next=p.next;//修改链,新结点的下一个结点为原本结点的下一个
		p.next=s;//原本结点的下一个为新结点
	}

	//删除
	public void remove(int i) throws Exception{
		Node p=head;//初始化,p指向头结点
		int j=-1;
		while(p.next!=null&&ji-1||p.next==null){
			throw new Exception("删除位置不合法");
		}
		p.next=p.next.next;//使待删除结点从单链表中脱离出来
	}
	
	//按值查找
	public int indexOf(Object x){
		Node p=head.next;//初始化,p指向首结点
		int j=0;//j为计数器
		
		//从链表的首结点开始寻找,直到找到p.data或者到达单链表的表尾
		while(p!=null&&p.data!=x){
			p=p.next;//指向下一个结点
			++j;//计数器的值加1
		}
		if(p!=null){
			return j;//返回值为x的结点在单链表中的位置
		}
		else {
			return -1;//不存在,返回-1
		}
	}
	
	public void display(){
		Node node=head.next;//取出带头结点的单链表中的首结点
		while(node!=null){
			System.out.println(node.data+" ");//输出结点的值
			node=node.next;//取下一个结点
		}
		System.out.println();
	}
}


你可能感兴趣的:(Java,数据结构)