线性表链式存储结构-javascript实现


        function LinkedList(){
            //节点定义
            function Node(element){
                    this.element = element
                    this.next = null
            }
            let length = 0 //存放链表长度
            head = new Node(null) //头节点
            //增加在尾部创建节点方法
            this.append = function(element){
                //创建节点
                let node = new Node(element)
                //使用current表示当前状态
                let current 
                
                if(!head.next){
                    //初始化第一个节点
                    node.next = head.next
                    head.next = node
                    length++
                }else{
                    current = head.next
                    while(current.next){
                        current = current.next
                    }
                    current.next = node
                    length++
                }
                    
                    return true
            }
            //在指定位置插入节点方法
            this.insert = function(position,element){
                if(position>=0 && position<=length){
                    let node = new Node(element)
                    current = head
                    //使用previous来表示当前状态的前一个指针
                    let previous
                    index = 0
                    if(position ===0){
                        node.next = current
                        head = node
                    }else{
                        while(index<position){
                            previous = current 
                            current = current.next
                            index++
                        }
                        node.next = current
                        previous.next = node
                    }
                    length++
                    return true
                }
                else{
                    return false
                }
            }
            //在指定位置删除节点的方法
            this.removeAt = function(position){
                if(position>-1&&position<length){
                    let current = head
                    let index = 0
                    let previous
                    if(position==0){
                        head = current.next
                    }else{
                        while(index<position){
                            previous = current
                            current = current.next
                            index++
                        }
                        previous.next = current.next
                    }
                    length--
                    return current.element
                }else{
                    return null
                }
            }

            //整表创建(头插法)
            this.createList = function(List,len){
                
                let i = 0//计数器
                let p //声明节点
                let current
                
                for(i;i<len;i++){
                    let number = Math.random()
                    let node = new Node(null)
                    current = head.next
                    p = node
                    p.element = number
                    p.next = current
                    head.next = p
                    length++
 
                }
                return true
            }

            //读取第i个数据
            this.read = function(i){
                let j = 1 //计数器
                let current =head
                if(i==0){
                    return current.element
                }else{
                    while(j<=i){
                        current = current.next
                        j++
                    }
                    return current.element
                }
                
                }
             
            //获取链表长度
            this.size = function(List){
            return length
            }

            //将链表节点全部列举出来
            this.every = function(List){
            let Arr = []
            for(let v = 1;v<=length;v++){
            Arr.push(A.read(v))
            }
            return Arr
            }

            this.isEmpty = function(){
                return !length ==0
            }

        }
        

上述代码封装了线性表链式结构的创建、插入、删除、查询长度、判断是否为空链表、查询指定位置数据等多个函数功能,均作了部分注释,如有错误地方还请指正谢谢。

以下是调用函数创建链表的测试代码:

   
        let A = new LinkedList() 
        A.createList(A,10)
        A.append(2)
        let result = A.every(A)
        console.log(result)
        A.removeAt(6)
        let result2 = A.every(A)
        console.log(result2)
        console.log(A.read(10))
        console.log(A.isEmpty())

结果为:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值