zoukankan      html  css  js  c++  java
  • 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;

     循环链表:

    • 结构图:

  • 相关阅读:
    制作A4纸打印的网页像素大小设置(转)
    关于Vue.use()详解
    Vue的axios如何全局注册
    JS中的apply,call,bind深入理解
    JS异步编程 (2)
    JS异步编程 (1)
    彻底搞清楚javascript中的require、import和export(js模块加载规范的前世今生)
    IPv6地址分类及表示方法
    SublimeText3追踪函数工具CTags设置及使用
    转-编写CGI小结
  • 原文地址:https://www.cnblogs.com/jinkspeng/p/4030681.html
Copyright © 2011-2022 走看看