• 链表的实现 -- 数据结构与算法的javascript描述 第六章


    链表

    链表是由一组节点组成的集合。每个节点都使用一个对象的引用指向它的后继。指向另一个节点的引用叫做链

    结构示意图 :

    链表头需要我们标识 head

     { element:head,next:obj1 }   ==>   { element:obj1,next:obj2 }   ==>   { element:obj2,next:obj3 }   ==>   { element:obj3,next:null }  ==>   null 
    
    

    head 是我们内部标识,我们默认不显示给用户这个数据,只用于内部使用。 即用户的链表数据中 不会有head

    /**
         * 节点
         * @constructor
         */
        function Node(element){
            this.element = element,
            this.next = null;
        }
    
        /**
         * 链表
         * @constructor
         */
        function LinkedList(){
            var me = this ;
            me.head = new Node('head')
            me.find = find;
            me.insert = insert;
            me.remove = remove;
            me.display = display;
            //查找元素
            function find(element){
                var cur = me.head;
                while(cur.element!=element){
                    cur = cur.next;
                }
                return cur;
            }
            //插入元素到链表
            function insert(newElement,item){
                var current ;
                if(me.head.next==null && !item){
                    current = me.head;
                }else if(item){
                    current = me.find(item);
                }else {
                    throw Error("need item")
                }
                var newNode = new Node(newElement);
    
                newNode.next = current.next;
                current.next = newNode;
            }
            //从链表中移除元素
            function remove(element){
                var curPrev = findPrev(element);
                var curNext = find(element).next;
                curPrev.next = curNext;
            }
            //查找前一个元素
            function findPrev(element){
                var cur = me.head;
                while(!(cur.next==null) && cur.next.element!=element){
                   cur = cur.next;
                }
                return cur;
            }
            //打印所有链表元素
            function display(){
                var s = '',cur = me.head;
                while(!(cur.next==null)){
                    s += cur.next.element +"  ";
                    cur = cur.next;
                }
                console.log(s)
            }
    
        }
    
    

    测试

     //链表测试
            var cities = new LinkedList();
            cities.insert("Conway");
            cities.insert("Russellville", "Conway");
            cities.insert("Carlisle", "Russellville");
            cities.insert("Alma", "Carlisle");
            cities.display();   // Conway  Russellville  Carlisle  Alma 
            cities.remove("Carlisle");
            cities.display();  // Conway  Russellville  Alma 
    
  • 相关阅读:
    27.全排列与带重复的排列
    ios之自定义UISwitch
    ios之UIAlertView
    ios之UISegmentedcontol
    ios之UISlider
    ios之UITextfield
    ios之UIImageView
    ios之UIButoon
    ios之UILabel
    ios 点餐系统
  • 原文地址:https://www.cnblogs.com/iyueyao/p/3992587.html
Copyright © 2020-2023  润新知