• 双向链表数据结构java实现


    双向链表-数据结构-java实现

    目录

    抽象表:1

    节点... 1

    双向链表实现:2

    双向链表输出测试:3

    输出结果:3

     

    抽象表:

    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());

           }  

        }

    }

     

    输出结果:

    image

  • 相关阅读:
    js实现输入银行卡号隔四位添加一个空格
    写出优雅的代码
    FOJ Problem 1016 无归之室
    FOJ Problem 1015 土地划分
    大数相加减
    NYOJ 42 一笔画
    NYOJ36 水池数目
    NYOJ 32 组合数
    贪吃蛇StringBuilder 和 定时器
    星 辰 · 第 三 条 约 定
  • 原文地址:https://www.cnblogs.com/xilifeng/p/2713185.html
Copyright © 2020-2023  润新知