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;

     循环链表:

    • 结构图:

  • 相关阅读:
    [转载]PHP中PSR-[0-4]规范
    Git忽略规则及.gitignore规则不生效的解决办法
    nginx配置tp5的pathinfo模式并隐藏后台入口文件
    php过滤 字符
    使用ajax的post方式下载excel
    scws简单中文分词
    php的api及登录的权限验证
    对钩子的理解
    基于角色的权限控制
    微信开发之SVN提交代码与FTP同步到apache的根目录
  • 原文地址:https://www.cnblogs.com/jinkspeng/p/4030681.html
Copyright © 2011-2022 走看看