Javascript - 栈 和 单链表
最近在重温数据结构,于是写了一些代码玩玩,都是很初级的,表喷各位。。。。
function Stack() { this.dataStore = []; this.top = 0; } Stack.prototype = { length: function () { return this.top; }, push: function (element) { this.dataStore[this.top++] = element; return this.top; }, pop: function () { return this.dataStore[--this.top]; }, peek: function () { return this.dataStore[this.top - 1]; }, clear: function () { return this.top = 0; } }; var stack = new Stack(); console.log("length:" + stack.length()); stack.push("huangjacky"); stack.push("fiend"); console.log("length:" + stack.length()); while (stack.length() > 0) { var s = stack.pop(); console.log("element:" + s); } console.log("length:" + stack.length()); function Node(element) { this.element = element; this.next = null; } function LinkList() { this.head = new Node("head"); } LinkList.prototype = { insert: function (element, after) { var s = new Node(element); if (after == undefined) { //如果没有指定after,那么就直接插入到链表的最前面 s.next = this.head.next; this.head.next = s; return true; } else { var node = this.head; while (node != null) { if (node.element == after) { s.next = node.next; node.next = s; return true; } node = node.next; } } return false; }, remove: function (element) { var node = this.head; var preNode = null; while (node != null) { if (node.element == element) { preNode.next = node.next; return true; } preNode = node; node = node.next; } return false; }, find: function (element) { var node = this.head; while (node != null) { if (node.element == element) { break; } node = node.next; } return node; }, toString: function () { var s = ""; var node = this.head; while (node != null) { if (node.next == null) { s += node.element; } else { s += node.element + " --> "; } node = node.next; } return s; } }; var l = new LinkList(); l.insert("huangjacky"); l.insert("fiend", "huangjacky"); l.insert("jackyhuang", "fiend"); l.insert("abc"); var s = l.find("huangjacky"); if (s) { console.log("next to huangjacky is :" + s.next.element); } l.remove("fiend"); console.log("linklist is :" + l.toString());