• js:数据结构笔记5--链表


    数组:

    • 其他语言的数组缺陷:添加/删除数组麻烦;
    • js数组的缺点:被实现为对象,效率低;
    • 如果要实现随机访问,数组还是更好的选择;

    链表:

    • 结构图:

    • 基本代码:
      function Node (elem) {
         this.elem = elem;
         this.next = null;
      }
      function LList() {
         this.head = new Node("head");
         this.find = find;
         this.insert = insert;
         this.findPrevious = findPrevious;
         this.remove = remove;
         this.display = display;
      }
      
      function find(item) {
         var currNode = this.head;
         while(currNode.elem !== item) {
            currNode = currNode.next;
         }
         return currNode;
      }
      function insert(newElem,item) {
         var newNode = new Node(newElem);
         var currNode = this.find(item);
         newNode.next = currNode.next;
         currNode.next = newNode;
      }
      function display() {
         var currNode = this.head;
         while(!(currNode.next === null)) {
            console.log(currNode.next.elem);
            currNode = currNode.next;
         }
      }
      function findPrevious(item) {
         var currNode = this.head;
         while(!(currNode.next === null) && (currNode.next.elem !== item)) {
            currNode = currNode.next;
         }
         return currNode;
      }
      function remove(item) {
         var prevNode = this.findPrevious(item);
         if(!(prevNode.next === null)) {
            prevNode.next = prevNode.next.next;
         }
      }

    操作:demo;

    双向链表:

    • 结构图:

    • 基本代码:
      function Node(elem) {
         this.elem = elem;
         this.next = null;
         this.previous = null;
      }
      function LList() {
         this.head = new Node("head");
         this.find = find;
         this.insert = insert;
         this.display = display;
         this.remove = remove;
         this.findLast = findLast;
         this.dispReverse = dispReverse;
      }
      
      function find(item) {
         var currNode = this.head;
         while(currNode.elem !== item) {
           currNode = currNode.next;
         }
         return currNode;
      }
      function insert(newElem,item) {
         var newNode = new Node(newElem);
         var currNode = this.find(item);
         newNode.next = currNode.next;
         newNode.previous = currNode;
         currNode.next = newNode;
      }
      function display() {
         var currNode = this.head;
         while(!(currNode.next === null)) {
            console.log(currNode.next.elem);
            currNode = currNode.next;
         }
      }
      function remove(item) {
         var currNode = this.find(item);
         if(!(currNode.next === null)) {
            currNode.previous.next = currNode.next;
            currNode.next.previous = currNode.previous;
            currNode.next = null;
            currNode.previous = null;
         }
      }
      function findLast() {
         var currNode = this.head;
         while(!(currNode.next === null)) {
            currNode = currNode.next;
         }
         return currNode;
      }
      function dispReverse() {
         var currNode = this.findLast();
         while(!(currNode.previous === null)) {
            console.log(currNode.elem);
            currNode = currNode.previous;
         }
      }

    操作:demo;

     循环链表:

    • 结构图:

  • 相关阅读:
    数据分析普遍存在的方法及理论有哪些?-数据分析师
    R语言 我要如何开始R语言_数据分析师
    R语言 我要如何开始R语言_数据分析师
    Root(hdu5777+扩展欧几里得+原根)
    CF#256(Div.2) A. Rewards
    HDU-4031-Attack(树状数组)
    POJ 3253 Fence Repair(哈夫曼树)
    Python的Django框架中的Context使用
    C++中面向对象的理解
    统计输入的单词中有几个长度大于n的,n是自己指定的,用函数对象实现
  • 原文地址:https://www.cnblogs.com/jinkspeng/p/4030681.html
Copyright © 2020-2023  润新知