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;

     循环链表:

    • 结构图:

  • 相关阅读:
    git使用
    onethink常用标签的使用示例
    thinkphp中 select() 和find() 方法的区别
    CSS3Ps -Photoshop图层特效转CSS3代码
    普通公司网站代码片段合辑
    IE hack大全
    PHP四种基础算法详解:冒泡,选择,插入和快速排序法
    PHP编程效率的20个要点
    php实现AES/CBC/PKCS5Padding加密解密(又叫:对称加密)
    浏览器桌面提醒,适用于网站“新消息提醒”
  • 原文地址:https://www.cnblogs.com/jinkspeng/p/4030681.html
Copyright © 2011-2022 走看看