zoukankan      html  css  js  c++  java
  • 双向链表数据结构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

  • 相关阅读:
    part11-1 Python图形界面编程(Python GUI库介绍、Tkinter 组件介绍、布局管理器、事件处理)
    part10-3 Python常见模块(正则表达式)
    Cyclic Nacklace HDU
    模拟题 Right turn SCU
    状态DP Doing Homework HDU
    Dp Milking Time POJ
    区间DP Treats for the Cows POJ
    DP Help Jimmy POJ
    Dales and Hills Gym
    Kids and Prizes Gym
  • 原文地址:https://www.cnblogs.com/xilifeng/p/2713185.html
Copyright © 2011-2022 走看看