今日学习内容
最近已经要求开始写大论文了,所以学习的时间会减少,但是我会尽量保持每天的学习时间,不会放弃的。
1、《JavaScript数据结构与算法》 P93-105
今日笔记
1、链表简单实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
| function LinkedList(){ let Node = function(element){ this.element = element; this.next = null; };
let length = 0; let head = null;
this.append = function(element){ let node = new Node(element), current;
if(head === null){ head = node; } else { current = head;
while(current.next){ current = current.next; }
current.next = node; }
length++; }; this.insert = function(position, element){ if(positio >= 0 && position <= length){ let node = new Node(element), current = head, previous, index = 0; if(position === 0){ node.next = current; head = node; }else{ while(index++ < position){ previous = current; current = current.next; } node.next = current; previous.next = node; } length++; return true; }else{ return false; } }; this.removeAt = function(position){ if(position > -1 && position < length){ let current = head, previous, index = 0;
if(position === 0){ head = current.next; } else { while(index++ < position){ previous = current; current = current.next; }
previous.next = current.next; }
length--;
return current.element; } else { return null; } }; this.remove = function(element){ let index = this.indexOf(element); return this.removeAt(index); }; this.indexOf = function(element){ let current = head, index = -1; while(current){ if(element === current.element){ return index; } index++; current = current.next; } return -1' }; this.isEmpty = function(){ return length === 0; }; this.size = function(){ return length; }; this.getHead = function(){ return head; }; this.toString = function(){ let current = head; string = ''; while(current){ string += current.element + (current.next ? 'n': ''); current = current.next; } return string; }; this.print = function(){}; }
|
2、双向链表: 双向链表和普通链表的区别在于,双向链表的节点有两个指针,一个指向前一个节点,一个指向后一个节点。
1 2 3 4 5 6 7 8 9 10 11 12 13
| function DoublyLinkedList(){ let Node = function(element){ this.element = element; this.next = null; this.prev = null; }
let length = 0; let head = null; let tail = null;
}
|
3、循环链表: 循环链表和链表的区别在于,链表的最后一个节点指向null,而循环链表的最后一个节点指向第一个节点。
4、双向循环链表有指向head元素的tail.next,和指向tail元素的head.prev。