链表总结

               链表总结

之前在学校数据结构这门课中就有学过链表——单链表与双向链表,但都是在C语言的情况下实现的,现在在JAVA的环境下虽然原理基本相同但在语言的实现方面还是有一定的差异。链表比起数组有其自身的很多优点,数组的特点是长度和元素的类型是固定的,但这也是它的缺点,对于元素的插入和删除就麻烦多了,而链表正好能弥补它的这些缺点,只要改变其的结点引用就可以了。链表中结点是一个很重要的概念,每个结点包括两部分,一个是存储数组的数据域一个是存储下一个结点位置的指针域。而双向链表相对于单向链表,结点除了数组域外还有前指针域和后指针域。

再来说说数组队列与链表队列,从整体而言链表队列添加元素比数组队列方便,若从最后添加元素则数组队列较链表队列方便。

下面是双链表的增、删、改、查的实现:

//添加元素方法

    public void add(Object obj){

      //创建结点对象

      Node node=new Node(obj);

      //判断条件

      //若队列为空

      if(null==first){

         first=node;

         last=node;

      }else{

         //从链表尾加入

         last.setchild(node);

         node.setparent(last);

         last=node;

      }

    }   

    //获取指定位置元素的方法

    public Node get(int index){

      System.out.println(this.getLength());

      //判断条件,队满或队空,则抛出异常

      if(index<0||index>this.getLength()){

         throw new RuntimeException("下标越界了!");

      }else{

         //得到地址

         Node node=first;

         int count=0;

         //当地址不为满时即依次遍历得到指定位置元素

         while(count!=index){

            //得到下一个结点的位置

            node=node.getchild();

            count++;

         }

         return node;

      }

    }

  //删除方法

  public void deleteList(int index){

  //判断条件——抛出异常,看是否越界

  if(index<0||index>this.getLength()){

      throw new RuntimeException("下标越界了!");

  }else{

      //得到根据索引地址得到的元素值

      Node node=this.get(index);

      //根据索引得到父结点与子结点

      Node fnode=node.getparent();

      Node cnode=node.getchild();

      //判断条件,根据条件进行删除设置

      //若父节点是空的,则第一个结点便是子节点

      if(fnode==null){

         first=cnode;

      }

      //若子节点是空的,则父节点的下一个结点(即父节点的孩子结点)便是空的

      if(cnode==null){

         fnode.setchild(null);

      }//其他情况下

      else{

         fnode.setchild(cnode);

         cnode.setparent(fnode);

      }

  }

  

  }

  //根据索引修改得到元素的内容

  public void updateList(int index,Object obj){

     //判断条件若超出长度则越界

     if(index<0||index>this.getLength()){

        throw new RuntimeException("下标越界了!");

     }else{

        //得到当前结点的内容

        Node node=this.get(index);

        //所修改成的内容

        node.setobj("困了就睡呗!");

     }

  }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值