• JS-常用的数据结构之链表的实现


      1 function LinkedList(){
      2     var Node = function(element){
      3         this.element = element;
      4         this.next = null;
      5     };
      6     
      7     var length = 0;
      8     var head = null
      9    
     10     this.append = function(element){
     11        // 创建一个节点
     12        var node = new Node(element);
     13        var current = null;
     14        
     15        if (head == null){
     16            head = node;
     17        }else{
     18            current = head;
     19            while(current.next){
     20                current = current.next;
     21            }
     22            //找到最后一项,将其next赋为node,建立连接
     23            current.next = node;
     24        }
     25        length++;
     26     } //向链表尾部添加一个新的项
     27 
     28     this.insert = function (position, element) {
     29         // 检查越界
     30         if(position >= 0 && position < length){
     31             var node = new Node(element);
     32             var current = head;
     33             var previous = null
     34             var index = 0
     35  
     36             if(position === 0){
     37                 node.next = current;
     38                 head = node;
     39             }else{
     40                 // 1 从前往后遍历找到position
     41                 while(index < position){
     42                    previous = current;
     43                    current = previous.next;
     44                    index++;
     45                 }
     46 
     47                 //通过改变指针,将node链接在previous和current之间
     48                 previous.next = node;
     49                 node.next = current;
     50                
     51                 // 2 经验证1和2没有区别
     52                 //while (index++ < position) {
     53                 //    previous = current;
     54                 //    current = current.next;
     55                 //}
     56                 //通过改变指针,将node链接在previous和current之间
     57                 //node.next = current;
     58                 //previous.next = node;
     59                 return true;
     60             }
     61         }else{
     62             return false;
     63         }
     64     }; //向链表特定位置插入一个新的项
     65 
     66     this.removeAt = function (position) {
     67         if(position > -1 && position < length){
     68             var current = head;
     69             var previous = null;
     70             var index = 0;
     71 
     72             if (position == 0){
     73                 head = current.next;
     74             }else{
     75                 while(index < position){
     76                     previous = current;
     77                     current = current.next;
     78                     index++;
     79                 }
     80                 previous.next = current.next;
     81             }
     82             length--;
     83             return current.element;
     84         }else{
     85             return null;
     86         }
     87     }; //从链表特定位置移除一项
     88     this.remove = function (element) {
     89         var index = this.indexOf(element);
     90         this.removeAt(index);
     91     }; //从链表中移除一项
     92     this.indexOf = function (element) {
     93         var current = head;
     94         var index = 0;
     95         while(current){
     96             if (current.element === element){
     97                 return index;
     98             }
     99             current = current.next;
    100             index++;
    101         }
    102         return -1; 
    103     }; //返回元素在链表中的索引,如果没有则返回-1
    104     this.isEmpty = function () {
    105         return length === 0;
    106     }; //判断链表是否为空
    107     this.size = function () {
    108         return length;
    109     }; //返回链表包含元素个数
    110     this.getHead = function () {
    111         return head;
    112     }; //返回链表第一个元素
    113     this.toString = function () {
    114         var current = head;
    115         var str = "";
    116         while(current){
    117             current = current.next;
    118             str += "," + current.element;
    119         }
    120         return str.slice(1);
    121     }; //只输出元素的值
    122     this.print = function () {
    123         console.log(this.toString());
    124     }; //打印元素的值
    125 }
  • 相关阅读:
    [bbk2342] 第47集 Chapter 09Optimizing Sore Perations(02)
    [bbk2345] 第50集 Chapter 12Optimizing Sore Perations(05)
    [bbk2343] 第48集 Chapter 12Optimizing Sore Perations(03)
    [bbk2863] 第54集 Chapter 14Using Oracle Dasta Storage Structures Efficiently(00)
    [bbk2515] 第51集 Chapter 13Using Oracle Blokcs Efficeintly[00]
    [bbk2341] 第46集 Chapter 09Optimizing Sore Perations(01)
    [bbk2863] 第54集 Chapter 13Using Oracle Blokcs Efficeintly[03]
    [bbk2668] 第53集 Chapter 13Using Oracle Blokcs Efficeintly[02]
    [bbk2344] 第49集 Chapter 12Optimizing Sore Perations(04)
    QT 中的模态和非模态对话框
  • 原文地址:https://www.cnblogs.com/orxx/p/10279509.html
Copyright © 2020-2023  润新知