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;

 循环链表:

  • 结构图:

你可能感兴趣的:(数据结构)