zoukankan      html  css  js  c++  java
  • javascript算法-单链表

    链表相比数组更具灵活性和扩展性。主要有节点数据以及指向节点的指针所构成。

    链表中节点的实现【元素和指针】:

            let Node = function( element ){
                this.element = element;
                this.next = null;
            };

    单链表的实现:

    function LinkedList(){
            let Node = function( element ){
                this.element = element;
                this.next = null;
            };
    
            let head = null;
            let length = 0;
    
            this.append = function( element ){
                let newNode = new Node( element );
                let current = null;
                if( head == null ){
                    head = newNode;
                }else{
                    current = head;
                    while( current.next ) {
                        current = current.next;
                    }
                    current.next = newNode;
                }
                length++;
            };
    
            this.size = function(){
                return length;
            };
    
            this.removeAt = function( pos ){
                if( pos > -1 && pos < length ){
                    var current = head,
                        index = 0,
                        prev = null;
    
                    if( pos == 0 ){
                        head = current.next;
                    }else{
                        while( index++ < pos ){
                            prev = current;
                            current = current.next;    
                        }
                        prev.next = current.next;    
                        length--;
                        return current.element;
                    }
                }else{
                    return null;
                }
            };
    
            this.print = function(){
                let current = head;
                while( current ){
                    console.log( current.element );
                    current = current.next;
                }
            };
    
            this.insert = function( pos, element ){
                let newNode = new Node( element );
                let current, prev, index = 0;
                current = head;
                if( pos >= 0 && pos <= length ){
                    if( pos == 0 ){
                        newNode.next = head;
                        head = newNode;
                    }else{
                        while( index++ < pos ){
                            prev = current;
                            current = current.next;    
                        }
                        newNode.next = current;    
                        prev.next = newNode;
                    }
                    length++;
                    return true;
                }else {
                    return false;
                }
            };
            this.toString = function(){
                let current = head, string = '';
                while( current ){
                    string += current.element + ',';
                    current = current.next;
                }
                return string.substring( 0, string.length - 1 );
            };
            this.indexOf = function( element ){
                let current = head, index = -1;
                while( current ){
                    index++;
                    if( current.element == element ){
                        return index;
                    }
                    current = current.next;
                }
                return -1;
            };
            this.remove = function( element ){
                let pos = this.indexOf( element );
                return this.removeAt( pos );
            };
            this.isEmpty = function(){
                return length == 0;
            };
            this.getHead = function(){
                return head;
            }
        }    
    
    
        var oLink = new LinkedList();
        oLink.append( "java" );
        oLink.append( "php" );
        oLink.append( "javascript" );
        oLink.append( "python" );
    
        oLink.print();
        console.log( "-----------------------节点个数------------------------")
        console.log( oLink.size() );
    
        console.log( "-----------------------删除第2个元素之前------------------------")
        console.log( oLink.removeAt( 2 ) );
        console.log( "-----------------------删除第2个元素之后------------------------")
        oLink.print();
        console.log( "节点个数");
        console.log( oLink.size() );
        console.log( "-----------------------插入节点前------------------------")
        oLink.insert( 0, "c语言" );
        oLink.insert( 3, "c++语言" );
        console.log( "-----------------------插入节点后------------------------")
        oLink.print();
        oLink.insert( 4, "erlang语言" );
        console.log( "-----------------------插入节点后------------------------")
        oLink.print();
        console.log( "-----------------------节点个数------------------------")
        console.log( oLink.size() );
    
        console.log( "-----------------------toString------------------------")
        console.log( oLink.toString() );
        console.log( "------------------------indexOf-----------------------" );
        console.log( oLink.indexOf( "c语言2" ) );
        console.log( "------------------------clear-----------------------" );
        oLink.print();
  • 相关阅读:
    第三次作业
    第二次作业
    第一次作业—编译原理概述
    第六次课堂作业——正规文法与正规式
    词法分析程序的设计与实现
    1702第四次作业(文法和语文总结与梳理)
    1702第三次作业(语法树,短语,直接短语,句柄)
    软工1702第一次作业(简述编译程序)
    random库的使用
    基本的字符串之切片
  • 原文地址:https://www.cnblogs.com/ghostwu/p/9279671.html
Copyright © 2011-2022 走看看