博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构与算法之链表-javascript实现
阅读量:6879 次
发布时间:2019-06-26

本文共 3587 字,大约阅读时间需要 11 分钟。

链表的定义:

链表是一种物理 上非连续、非顺序的 , 的逻辑顺序是通过链表中的 链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储 的数据域,另一个是存储下一个结点地址的 域。 相比于 ,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。
使用链表结构可以克服 链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了 随机读取的优点,同时链表由于增加了结点的 域,空间开销比较大。链表最明显的好处就是,常规 排列关联项目的方式可能不同于这些数据项目在 或 上顺序,数据的存取往往要在不同的排列顺序中转换。链表允许插入和移除表上任意位置上的 ,但是不允许 。链表有很多种不同的类型: , 以及 。链表可以在多种编程语言中实现。
 
 
下文中链表的实现原理是:
每添加一个节点,就相当于实例化一个node对象,
下一个节点是在当前node实例化对象的内部创建一个node对象,
然后用current = current.next让指针永远指向链表的最后一项
'use strict'function LinkedList(){    var Node = function(ele){        this.element = ele;        this.next = null;    };    this.length = 0;    this.head = null;     /*向链表末尾添加一个元素*/    this.append = function(ele){        var node = new Node(ele),            current;        if(this.head == null){            this.head = node;        }else{            current = this.head;            while(current.next){                current = current.next;            }            current.next = node;        }        this.length++;    };     /*通过索引从链表中移除一项*/    this.removeAt = function(position){        if(position > -1 && position < this.length){            var current = this.head,                previous,                index = 0;            if(position === 0){                this.head = current.next;            }else{                while(index++ < position){                    previous = current;                    current = current.next;                }                previous.next = current.next;            }            this.length--;            return current.element;        }else{            return null;        }    };     /*向链表特定位置插入一个新的项*/    this.insert = function(position, ele){        if(position >= 0 && position <= this.length){            var node = new Node(ele)            var current = this.head,                previous,                index = 0;            if(position === 0){                node.next = current;                this.head = node;            }else{                while(index++ < position){                    node.next = current;                    current = current.next;                }                node.next = current;                previous.next = node;            }            this.length++;            return true;        }else{            return false;        }    };     /*由于列表使用了Node类,就需要重写继承子javascript对象默认的toString方法,让其只输出元素的值*/    this.toString = function(){        var current = this.head,            string = '';        while(current){            if(current.element == this.head.element){                string += current.element;            }else{                string += ',' + current.element;            }            current = current.next;            }        return string.slice(0)    };     /*返回元素在链表中的索引,如果没有就返回-1*/    this.indexOf = function(ele){        var current = this.head,            index = 0;        while(current){            if(ele === current.element){                return index;            }            index++;            current = current.next;        }        return -1;    };     /*移除链表中的一项*/    this.remove = function(ele){        var index = this.indexOf(ele);        return this.removeAt(index)    };     /*判断链表是否为空,为空返回true,不为空返回false*/    this.isEmpty = function(){        return this.length ===0;    };     /*返回链表所包含的元素的个数*/    this.size = function(){        return this.length;    };   /*返回整个链表的结构-->代码结构*/    this.getHead = function(){        return this.head;    }}

 

转载于:https://www.cnblogs.com/guojikun/p/6204098.html

你可能感兴趣的文章
【转载】岁月倾尽,黯然诉说一纸神伤
查看>>
虚拟化系列-VMware vSphere 5.1 VDP备份管理
查看>>
Java笔记2:Eclipse编写第一个Java程序
查看>>
【足迹C++primer】表达式求值
查看>>
javascript小白学习指南0---1
查看>>
C#实现接口xml序列化与反序列化
查看>>
[译]Godot系列教程一 - 场景与节点
查看>>
BUG级别定义标准
查看>>
Java常考面试题(经典)
查看>>
认清世界,认清自我,超凡脱俗
查看>>
如何在Fedora 22上面配置Apache的Docker容器
查看>>
Swift 控制流
查看>>
【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
查看>>
C语言接口与实现实例
查看>>
含有汉字的固定字符由ZHS16GBK数据库导入到AL32UTF8的数据库
查看>>
php-fpm进程数优化
查看>>
iOS中如何对具有复杂依赖的SDK在真机上进行单元测试
查看>>
Mobile Web中URL设计问题
查看>>
core Animation之CAAnimationGroup(动画群组)
查看>>
重构实践:体验interface的威力(一)
查看>>