在javascript中使用链接列表

时间:2016-03-17 09:36:00

标签: javascript arrays linked-list

在javascript中使用链接列表是否存在任何冒险行为?它在数组上的主要优势(例如)是我们可以在随机索引处插入元素而不移动每个元素,并且它们不限于作为数组的大小。

但是,JS中的数组会动态扩展,缩小,并且数组访问数据的速度更快。我们也可以使用Array.prototype.splice()方法(实际上链接列表仍然比这个更快)来插入数据。

在JavaScript中使用链接列表对数组有什么好处(速度等等)吗?

使用JS的基本链接列表代码。

function list() {

  this.head = null;
  this.tail = null;

  this.createNode=function(data) {
    return {data: data, next: null }
  };

  this.addNode=function(data) {
    if (this.head == null) {
      this.tail = this.createNode(data);
      this.head = this.tail;
    } else {
      this.tail.next = this.createNode(data);
      this.tail = this.tail.next;
    }
  };

  this.printNode=function() {
    var x = this.head;
    while (x != null) {
      console.log(x.data);
      x = x.next;
    }
  }
}

var list = new list();
list.addNode("one");
list.addNode("two");
list.printNode();

2 个答案:

答案 0 :(得分:3)

如果您在前面或后面添加或附加元素,则在链接列表中,时间复杂度为O(1),但对于数组,它是O(n)。但是,如果使用索引从数组中检索元素,则时间复杂度将为O(1),而链表将为O(n)。

所以这取决于你要做什么,你需要创建基准测试,然后测试哪个操作需要花费多少时间。

您可以查看wiki

enter image description here

答案 1 :(得分:1)

我不知道性能差异。正如您所说,链接列表在内存分配,垃圾收集,稀疏性方面优于其他语言中的数组,但Javascript数组处理其中一些问题。但是,如果您的用例需要这种数据结构,您仍然可能有理由使用链接列表:也就是说,您只需要从前面开始(或者使用双向链接列表的任一端)到达项目并从项目开始到下一个项目,不需要通过数组索引随机访问。

关于链接列表的一些丰富多彩的比喻:What is a practical, real world example of the Linked List?