zoukankan      html  css  js  c++  java
  • [JS]實作LinkedList鏈結串列

    由於自身資料結構的基礎薄弱,買了一本JavaScript資料結構與演算法實作的書來看,重新把LinkedList鏈結串列學習了一遍,並用JS實作出來。

    LinkedList鏈結串列

    要存放多個元素,最常用的資料結構可能是陣列,但是在大多數語言中,陣列的大小是固定的,要從陣列中插入項目或移除項目的成本很高,因為必須移動其他元素。
    LinkedList 就解決了這個情況,它存放有順序的元素集合,但不同於陣列,鏈結串列的元素在記憶體中並不是連續放置,每個元素由一個存放元素本身的節點和一個指向下一個元素的指位器組成。

    實作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    function (){

    var Node = function(element){
    this.element = element;
    this.next = null;
    }
    var length = 0;
    var head = null;
    //尾部追加元素
    this.append = function(element){
    var node = new Node(element),
    current;
    if(head === null){
    head = node;
    }else{
    current = head;
    while(current.next){
    current = current.next;
    }
    current.next = node;
    }
    length++;
    }
    //移除特定位置元素
    this.removeAt = function(position){大专栏  [JS]實作LinkedList鏈結串列n>
    //檢查有無越界
    if(position > -1 && position < length){
    var current = head,
    previous,
    index = 0;
    //移除第一項
    if(position === 0){
    head = current.next;
    }else{
    while(index++ < position ){
    previous = current;
    current = current.next;
    }
    }
    length--;
    return current.element;
    }else{
    return null;
    }
    }
    //插入特定位置元素
    this.insert = function(position, element){
    if(position >=0 && position <= length){
    var node = new Node(element),
    current = head,
    previous,
    index = 0;
    //在第一個位置添加
    if(position === 0){
    node.next = current;
    head = node;
    }else{
    while(index++ < position){
    previous = current;
    current = current.next;
    }
    node.next = current;
    previous.next = node;
    }
    length++;
    return true;
    }else{
    return false;
    }
    }
    //將list輸出成String
    this.toString = function(){
    var current = head,
    string = '';
    while(current){
    string += current.element + (current.next ? ', ' : '');
    current = current.next;
    }
    return string;
    }
    //查詢元素在第幾項
    this.indexOf = function(element){
    var current = head,
    index = 0;
    while(current){
    if(element === current.element){
    return index;
    }
    index++;
    current = current.next;
    }
    return -1;
    }
    //移除指定元素
    this.remove = function(element){
    var index = this.indexOf(element);
    return this.removeAt(index);
    }
    this.isEmpty = function(){
    return length === 0;
    }
    this.size = function(){
    return length;
    }
    this.getHead = function(){
    return head;
    }
    }
  • 相关阅读:
    Android--adb
    Android 爬坑之路
    Android倒计时实现
    Android Studio常用设置
    Java Web开发——MySQL数据库的安装与配置
    DOS命令(系统错误5,拒绝访问)的解决方法
    Java EE开发环境——MyEclipse2017破解 和 Tomcat服务器配置
    设计模式-工厂模式
    设计模式-简单工厂模式
    设计模式简介
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12376170.html
Copyright © 2011-2022 走看看