• 单链表数据结构java实现


    单链表-数据结构-java实现

    目录

    抽象表:1

    单链表实现:1

    单链表输出测试:3

    输出结果:4

     

    抽象表:

    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;

    public class  Node

    {

        Object element;

        Node next;

       

        Node(Node nextval)

        {

           next = nextval;

        }

         public Node(Object obj,Node nextval)

        {

           element = obj;

           next = nextval;

        }

        public Node getNext()

        {

           return next;

        }

        public void setNext(Node nextval)

        {

           next = nextval;

        }

        public Object getElement()

        {

           return element;

        }

        public void setElement(Object obj)

        {

           element = obj;

        }

        public String toString()

        {

           return element.toString();

        }

    }

     

    package edu.cquptzx.List;

     

    publicclass SingleLinkList implements List

    {

        Node head;

        Node current;

        intsize;

       

        SingleLinkList()

        {

           head = current = new Node(null);

           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.");

           }

           if(i == -1) return;

           current = head.next;

           int j = 0;

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

           {

               current = current.next;

               j++;

           }

        }

        /**

         * 插入节点算法:

         * 1.调用index(i-1),让成员变量current指向第i-1个节点.

         * 2.obj,current.next为参数创建新的节点.

         * 3.更改current指向,改为下一个节点.

         * 4.表元素总数加1.

         */

        publicvoid insert(int i, Object obj) throws Exception {

           if(i<0 || i>size)

           {

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

           }

           index(i-1);

           current.setNext(new Node(obj,current.next));

           size++;

        }

     

        /**

         * 删除节点算法:

         * 1.调用index(i-1),让成员变量current指向第i-1个节点.

         * 2.把第i个节点脱链:让第i-1个节点的next域等于第i个节点的next.

         * 3.数据元素总数size1.

         */

        public Object delete(int i) throws Exception {

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

           size--;

           return obj;

        }

        /**

         * 获取指定的元素

         * 1.调用index(i),让成员变量current指向第i个节点.

         * 2.返回该节点的数据域的值.

         */

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

        }

     

        @Override

        publicint size() {

           // TODO Auto-generated method stub

           returnsize;

        }

     

        @Override

        publicboolean isEmpty() {

           // TODO Auto-generated method stub

           returnsize ==0;

        }

       

    }

    单链表输出测试:

    package edu.cquptzx.List;

     

    publicclass SingleLinkListTest

    {

        publicstaticvoid main(String agrs[])

        {

           SingleLinkList linkList = new SingleLinkList();

           int n = 10;

           try

           {

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

               {

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

               }

               linkList.delete(4);

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

               {

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

               }

           }

           catch(Exception e)

           {

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

           }

        }

    }

    输出结果:

    image

  • 相关阅读:
    MongoDB 备份方法
    Wix制作安装包
    OWIN and Katana
    JavaScript的语法要点 4
    JavaScript的语法要点 3
    Docker配置镜像源(windows)
    Centos 7 安装gdal
    centos下forever安装nodejs服务
    Ngix初识
    arcgis支持mongodb
  • 原文地址:https://www.cnblogs.com/xilifeng/p/2713125.html
Copyright © 2020-2023  润新知