js实现双向链表互联网机顶盒实战应用实现


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>
Javascript 相关文章推荐
css把超出的部分显示为省略号的方法兼容火狐
Jul 23 Javascript
将CKfinder整合进CKEditor3.0的新方法
Jan 10 Javascript
当滚动条滚动到页面底部自动加载增加内容的js代码
May 13 Javascript
jQuery与getJson结合的用法实例
Aug 07 Javascript
JS Attribute属性操作详解
May 19 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
Oct 20 Javascript
MvcPager分页控件 适用于Bootstrap
Jun 03 Javascript
mock.js实现模拟生成假数据功能示例
Jan 15 Javascript
JavaScript ES6常用基础知识总结
Feb 09 Javascript
五分钟搞懂Vuex实用知识(小结)
Aug 12 Javascript
layui上传图片到服务器的非项目目录下的方法
Sep 26 Javascript
JS性能优化实现方法及优点进行
Aug 30 Javascript
js常用代码段收集
Oct 28 #Javascript
jWiard 基于JQuery的强大的向导控件介绍
Oct 28 #Javascript
理解JSON:3分钟课程
Oct 28 #Javascript
Kibo 用于处理键盘事件的Javascript工具库
Oct 28 #Javascript
stream.js 一个很小、完全独立的Javascript类库
Oct 28 #Javascript
能说明你的Javascript技术很烂的五个原因分析
Oct 28 #Javascript
基于jquery的滚动鼠标放大缩小图片效果
Oct 27 #Javascript
You might like
PHP集成百度Ueditor 1.4.3
2014/11/23 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
tp5.1 框架路由操作-URL生成实例分析
2020/05/26 PHP
从javascript语言本身谈项目实战
2006/12/27 Javascript
javascript 基础篇4 window对象,DOM
2012/03/14 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
js中继承的几种用法总结(apply,call,prototype)
2013/12/26 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
JavaScript中的getDay()方法使用详解
2015/06/09 Javascript
JavaScript学习笔记整理之引用类型
2016/01/22 Javascript
ES6关于Promise的用法详解
2018/05/07 Javascript
使用webpack搭建react开发环境的方法
2018/05/15 Javascript
vue.js 实现评价五角星组件的实例代码
2018/08/13 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
js实现鼠标切换图片(无定时器)
2021/01/27 Javascript
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
解决安装python库时windows error5 报错的问题
2018/10/21 Python
Python中的异常处理try/except/finally/raise用法分析
2019/02/28 Python
Python除法之传统除法、Floor除法及真除法实例详解
2019/05/23 Python
用python实现英文字母和相应序数转换的方法
2019/09/18 Python
手把手教你pycharm专业版安装破解教程(linux版)
2019/09/26 Python
python argparser的具体使用
2019/11/10 Python
Python 解析pymysql模块操作数据库的方法
2020/02/18 Python
python:解析requests返回的response(json格式)说明
2020/04/30 Python
Pycharm常用快捷键总结及配置方法
2020/11/14 Python
英国领先的维生素和营养补充剂直接供应商:Healthspan
2019/04/22 全球购物
康拓普公司Java笔面试
2016/09/23 面试题
信息技术教学反思
2014/02/12 职场文书
励志演讲稿600字
2014/08/21 职场文书
家庭聚会祝酒词
2015/08/11 职场文书
《烈火英雄》观后感:致敬和平时代的英雄
2019/11/11 职场文书
Redis中缓存穿透/击穿/雪崩问题和解决方法
2021/12/04 Redis
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android