数据结构之循环双向链表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 DuLNode {
	public Object data;
	public DuLNode prior;//存放指向前驱结点的指针域
	public DuLNode next;//存放指向后继结点的指针域
	public DuLNode(){
		this(null);
	}
	public DuLNode(Object data){//构造数据域为data的新结点
		this.data=data;
		this.prior=null;
		this.next=null;
	}
}

具体实现:

package linearList;

import java.util.Scanner;

import sun.net.www.content.text.plain;
import sun.rmi.runtime.Log;

public class DuLinkList implements ILiist{
	public DuLNode head;  //双向循环链表的头结点
	public DuLinkList(){
		head=new DuLNode();//初始化头结点
		head.prior=head;//初始化头结点的前驱和后继
		head.next=head;
	}
	
	//从表尾到表头逆向创建双向循环链表,n为结点个数
	public DuLinkList(int n)throws Exception{
		this();
		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 int indexOf(Object x){
			DuLNode p=head.next;//初始化,p指向头结点
			int j=0;//j为计数器
			
			//从链表的首结点开始寻找,直到找到p.data或者到达双向循环链表的表尾
			while(!p.equals(head)&&!p.data.toString().equals(x.toString())){
				p=p.next;//指向下一个结点
				++j;//计数器的值加1
			}
			if(!p.equals(head)){
				return j;//返回值为x的结点在双向循环链表中的位置
			}
			else {
				return -1;//不存在,返回-1
			}
		}
		
		public void display(){
			DuLNode node=head.next;//取出带头结点的双向循环链表中的首结点
			while(!node.equals(head)){
				System.out.printf(node.data+" ");//输出结点的值
				node=node.next;//取下一个结点
			}
			System.out.println();
		}
}


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