Posted in Javascript onOctober 28, 2011
上实战代码:
linkedlistnode.js 节点类
/* * 链表节点 */ Dare.LinkedListNode = function () { this.data = null;//数据域 this.prev = null;//前驱 this.next = null;//后驱 }; Dare.extend(Dare.LinkedListNode, Dare); Dare.LinkedListNode.prototype.getValue = function () { return this.data; }; Dare.LinkedListNode.prototype.setValue = function (obj) { this.data = obj; }; Dare.LinkedListNode.prototype.getPrev = function () { return this.prev; }; Dare.LinkedListNode.prototype.setPrev = function (node) { this.prev = node; }; Dare.LinkedListNode.prototype.getNext = function () { return this.prev; }; Dare.LinkedListNode.prototype.setNext = function (node) { this.prev = node; };
linkedlist.js 链表类
/* * 双向链表 */ Dare.LinkedList = function () { this.head = null; this.current = null; this.tail = null; this.length = 0; }; Dare.extend(Dare.LinkedList, Dare); /* * 尾插法添加节点 */ Dare.LinkedList.prototype.appendNode = function (node) { if (this == null) return; if (node == null) return; var tail = this.tail; if (tail == null) { this.tail = this.head = node; } else { tail.next = node; node.prev = tail; this.tail = node; } this.length++; }; /* * 删除节点 */ Dare.LinkedList.prototype.moveNode = function (node) { if (this == null) return; if (node == null) return; //中间节点 var prev = node.prev; if (prev != null) { prev.next = node.next; } if (node.next != null) { node.next.prev = prev; } //头节点 if (node == this.head) { this.head = node.next; } //尾节点 if (node == this.tail) { if (prev != null) { this.tail = prev; } else { this.head = this.tail; } } node.prev = null; node.next = null; this.length--; }; /* * 构造节点 */ Dare.LinkedList.prototype.constructNode = function (node, obj) { if (node == null || obj == null) return; node.data = obj; return node; }; /* * 获取节点数据 */ Dare.LinkedList.prototype.getNodeData = function (node) { if (node == null) return; return node.data; }; /* * 从头开始 */ Dare.LinkedList.prototype.start = function () { if (this == null) return; return this.current = this.head; }; /* * 从尾开始 */ Dare.LinkedList.prototype.end = function () { if (this == null) return; return this.current = this.tail; }; /* * 下个节点 */ Dare.LinkedList.prototype.nextNode = function () { if (this == null) return; if (this.current == null) return var node = this.current; this.current = this.current.next; return node; }; /* * 上个节点 */ Dare.LinkedList.prototype.prevNode = function () { if (this == null) return; if (this.current == null) return var node = this.current; this.current = this.current.prev; return node; }; /* * 链表是否空 */ Dare.LinkedList.prototype.isempty = function () { if (this == null) return true; if (this.head == null) { return true; } else { return false; } }; /* * 链表长度 */ Dare.LinkedList.prototype.getLength = function () { if (this == null) return; return this.length; }; /* * 清空链表 */ Dare.LinkedList.prototype.clearList = function () { this.head.next = null; this.head = null; }; /* * 是否存在节点 */ Dare.LinkedList.prototype.containsNode = function (obj) { if (this == null) return false; var node = list.head; if (node == null) return false; while (node != null) { if (node.data == obj) { return true; } node = node.next; } };
实战调用用例代码陆续更新:
<script type="text/javascript"> var linkedList = new Dare.LinkedList(); function createList() { for (var i = 0; i < 7; i++) { var movie = {}; var linkedListNode = new Dare.LinkedListNode(); movie.id = i; movie.name = 'movie_' + i; linkedListNode.data = movie; linkedList.appendNode(linkedListNode); //创建链表 } //deleteNode(linkedList);//删除节点 //printList(linkedList); //输出链表 printNode(linkedList); } function printList(list) { var node = list.head; if (node == null) return; var html = ''; while (node != null) { var movie = node.data; html += movie.id + "|" + movie.name + "<br>"; node = node.next; } document.write(html); } function deleteNode(list) { var node = list.head; if (node == null) return; var i = 0; while (node != null) { if (i == 3) { linkedList.moveNode(node); //删除指定节点 break; } i++; node = node.next; } } var printNode = function(list) { var node = list.head; if (node == null) return; var i = 0; while (node != null) { if (i == 4) { var movie = linkedList.getNodeData(node); //打印指定节点 document.writeln(movie.id + "<br>"); document.writeln(movie.name + "<br>"); break; } i++; node = node.next; } } </script>
js实现双向链表互联网机顶盒实战应用实现
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@