zoukankan      html  css  js  c++  java
  • 链表

           链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针实现的。链表由一系列结点组成,结点可以在运行时动态生成,而且由于没有闲置的内存,因此空间效率比数组高。其插入操作可达到O(1)复杂度,但是查找或者访问特定的结点复杂度是O(n)。
    一、链表优点:
    • 空间没有限制
    • 插入删除元素很快
    二、链表缺点:存取速度很慢
    三、链表又分了好几类:
          1、单向链表:一个节点指向下一个节点
           2、双向链表:一个节点有两个指针域
           3、循环链表能通过任何一个节点找到其他所有的节点,将两种(双向/单向)链表的最后一个结点指向第一个结点从而实现循环
    四、Java实现链表
    算法:
    • 遍历
    • 查找
    • 清空
    • 销毁
    • 求长度
    • 排序
    • 删除节点
    • 插入节点
    1、首先定义节点类:
        public class LinearNode {
        private LinearNode next; //用于指向下一个节点
        private Object element;
     
        //创建一个空节点
        public LinearNode() {
            next = null;
            element = null;
        }
     
        //创建一个给定元素的节点
        public LinearNode(Object element) {
            next = null;
            this.element = element;
        }
     
        public LinearNode getNext() {
            return next;
        }
     
        public void setNext(LinearNode next) {
            this.next = next;
        }
     
        public Object getElement() {
            return element;
        }
     
        public void setElement(Object element) {
            this.element = element;
        }
     
        @Override
        public String toString() {
            return "{" +
                    "'" + element +
                    "'}";
        }
    }
    2、定义链表类实现增、删
       public class LinkedBag {
        private  int count; //记录当前节点在链表中的编号
        private LinearNode contents; //链表中的元素
     
        public LinkedBag() {
            count = 0;
            contents = null;
        }
     
        public int getCount() {
            return count;
        }
     
        public LinearNode getContents() {
            return contents;
        }
     
        //给链表中添加节点
        public void add(Object element){
     
            LinearNode node = new LinearNode(element);
            node.setNext(contents);
            contents = node;
            count++;
        }
        //删除链表中的给定的节点
        public Object remove(Object target){
            boolean found = false;
            LinearNode previous,current;
            Object result = null;
     
          if(contents.getElement().equals(target)){
              result = contents.getElement();
              contents = contents.getNext();
          }else{
              previous = contents;
              current = contents.getNext();
              for(int look=1;look<count&&!found;look++) {
                  if (current.getElement().equals(target)) {
                      found = true;
                  } else {
                      previous = current;
                      current = current.getNext();
                  }
                  if (!found) {
                      throw new NoSuchElementException();
                  }
                  result = current.getElement();
                  previous.setNext(current.getNext());
              }
          }
          count--;
          return result;
        }
     
       //遍历节点
        public void  next(LinkedBag bag)
        {
            LinearNode current = bag.getContents();
            while(current != null){
                System.out.print("--->"+current.getElement());
                current = current.getNext();
            }
        }
    }
     
  • 相关阅读:
    农民没有钱,怎样从种植养殖方面创业?
    有几万闲钱,投资什么好?
    2019适合创业的项目有哪些呢
    1981年的五块钱相当于现在多少钱的购买力?
    现阶段有50万资金,想去开一个店,从事什么行业好?
    投资40万左右适合做什么?
    阿里联手百联打造新零售,耗巨资10亿成立便利店
    90后,是被逼创业的,大家觉得呢?
    小本创业,具体怎么办?
    (三)调用web服务
  • 原文地址:https://www.cnblogs.com/lone5wolf/p/11016875.html
Copyright © 2011-2022 走看看