双向链表 --java实现

抽象表:

package edu.cquptzx.List;

publicinterface List

{

publicvoid insert(int i ,Object obj) throws Exception; //插入

public Object delete(int i ) throws Exception;                 //删除

public Object getData(int i ) throws Exception;                //获取i元素

publicint size();                                          //表数据总数

publicboolean isEmpty();                                   //是否为空

}

节点

package edu.cquptzx.List;

publicclass TNode

{

    TNode prior;

    Object element;

    TNode next;

    TNode( TNode nextval)

    {  

prior = nextval;

next = nextval;  

    }

    TNode(TNode priorval,Object obj,TNode nextval)

    {

prior = priorval;

element = obj;

next = nextval;     

    }

public TNode getPrior()

    {

returnprior;

    }

publicvoid setPrior(TNode priorval)

    {

prior = priorval;

    }

public TNode getNext()

    {

returnnext;

    }

publicvoid setNext(TNode nextval)

    {

next = nextval;

    }

public Object getElement()

    {

returnelement;

    }

publicvoid setElement(Object obj)

    {

element = obj;

    }

public String toString()

    {

returnelement.toString();

    }

}

双向链表实现:

/**

*

*/

package edu.cquptzx.List;

/**

* @author cquptzx

*

*/

publicclass DoubleLinkList implements List {

    TNode head;

    TNode current;

intsize;

/**

     * 构造函数:

     * 初始化循环链表.

     */

    DoubleLinkList()

    {

head=current=new TNode(null);

head.prior=head;

head.next=head;

size = 0;

    }

/**

     * 定位成员函数index(int i)的实现

     * 循环从头开始查找,循环的条件是:1.定位完成j==i;2.链表查找结束了.

     * @param i

     * @throws Exception 当参数i错误时,抛出异常.

     */

publicvoid index(int i )throws Exception

    {

if(i<-1 || i >size-1)

       {

thrownew Exception("i error in INDEX of DoubleLinkList.");

       }

if(i == -1) return;

current = head.next;

int j = 0;

while(current!=head && j<i)

       {

current = current.next;

           j++;

       }

    }

/* (non-Javadoc)

     * @see edu.cquptzx.List.List#insert(int, java.lang.Object)

     */

@Override

publicvoid insert(int i, Object obj) throws Exception

    {

// TODO Auto-generated method stub

if(i<0 || i>size)

       {

thrownew Exception ("i error in INSERT.");

       }

       index(i-1);

current.setNext(new TNode(current.getNext(),obj,current.next.getPrior()));

current.next.next.setPrior(current.next.getNext());

size++;   

    }

/* (non-Javadoc)

     * @see edu.cquptzx.List.List#delete(int)

     */

@Override

public Object delete(int i) throws Exception {

// TODO Auto-generated method stub

if(size == 0)

       {

thrownew Exception ("Link Blank in DELETE.");

       }

if(i<0 || i>size-1)

       {

thrownew Exception ("i error in DELETE.");

       }

       index(i-1);

       Object obj = current.next.getElement();

current.setNext(current.next.next);

current.next.setPrior(current.getNext());

size--;

return obj;

    }

/* (non-Javadoc)

     * @see edu.cquptzx.List.List#getData(int)

     */

@Override

public Object getData(int i) throws Exception {

// TODO Auto-generated method stub

if(i<-1 || i>size-1)

       {

thrownew Exception ("i error in getData.");

       }

       index(i);

returncurrent.getElement();

    }

/* (non-Javadoc)

     * @see edu.cquptzx.List.List#size()

     */

@Override

publicint size() {

// TODO Auto-generated method stub

returnsize;

    }

/* (non-Javadoc)

     * @see edu.cquptzx.List.List#isEmpty()

     */

@Override

publicboolean isEmpty() {

// TODO Auto-generated method stub

returnsize == 0;

    }

}

双向链表输出测试:

package edu.cquptzx.List;

publicclass DoubleLinkListTest

{

publicstaticvoid main(String agrs[])

    {

       DoubleLinkList doubleLinkList = new DoubleLinkList();

int n = 10;

try

       {

for(int i = 0;i<n;i++)

           {

              doubleLinkList.insert(i, new Integer(i+1));

           }

           doubleLinkList.delete(4);

for(int i = 0;i<doubleLinkList.size;i++)

           {

              System.out.print(doubleLinkList.getData(i)+" ->");

           }

       }

catch(Exception e)

       {

           System.out.println(e.getMessage());

       }  

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值