您的位置:首页 > 编程语言 > Java开发

【分享】JS超精简实现链表!拜请各位JAVA C# 大牛指点

2012-01-10 04:30 447 查看
【分享】js超精简实现链表!拜请各位java c# 大牛指点



单向链表 百度百科:http://baike.baidu.com/view/549479.htm?fr=ala0_1
最近家里来了个高手,他是学java的。正在努力跟他学习!
如果有对链表的误读,还请高手指点..小弟感激不尽。
js实现 链表!直接上代码。
var createlinklist = function(){
var _this = {}, first = null;
_this.add = function(val) {
first = {data:val, next: first || null};//这句比较重要
}
return _this;
}
你敢相信吗?上面的代码实现了。一个单向链表!
用下面的代码,就可以使用这个单项链表.
var linkslist = createlinklist(); // 创建一个单链表实例
linkslist.add("jelle"); // 向链表添加一个元素
linkslist.add("you");// 再次添加元素
当然链表不能仅仅只有 一个add方法。于是我添加了 get获取元素del 删除元素 与 show遍历元素
// --- del
_this.del = function(val){
if (first.data == val){
first = first.next;
return ;
}
var ptemp = temp = first;
for( ; temp; ptemp = temp ,temp= temp.next){
if(temp.data == val){
ptemp.next = temp.next;
_this.length--;
return ;
}
}
}
// --- get
_this.get = function(){
for( var temp = first ; temp; temp= temp.next){
if(temp.data == val){
return temp
}
}
}
// ---------
_this.show = function(fn) {
for(temp=first;temp;temp=temp.next) {
fn(temp.data);
}
}
已经基本实现了。单链表的基本功能!看下面演示。
当前链表数据
操作方法.把数据写入下面的text使用 按钮 add 添加 del 删除 get 获取
------全部源码-----------




全部源码
doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
html xmlns="http://www.w3.org/1999/xhtml">
head>
meta http-equiv="content-type" content="text/html; charset=utf-8" />
title>无标题文档title>
head>
body>
div>当前链表数据div>
textarea id="linkslist" style="width:500px;">textarea>
p>操作方法.把数据写入下面的text使用 按钮 add 添加 del 删除 get 获取p>
input type="text"id="linkslins_test" value="1" />
input type=button value="add" style="width:70px; height:22px;" onclick="linkslist.add(document.getelementbyid('linkslins_test').value);linkslist();">
input type=button value="del" style="width:70px; height:22px;" onclick="linkslist.del(document.getelementbyid('linkslins_test').value);linkslist();">
input type=button value="get" style="width:70px; height:22px;" onclick="linkslist.get(document.getelementbyid('linkslins_test').value);">br/>br/>
script type="text/javascript">
var createlinklist = function(){
var _this = {}, first = null;
_this.length = 0;
_this.add = function(val) {
first = {data:val, next: first || null};
_this.length++;
}
// --- del
_this.del = function(val){
if (first.data == val){
first = first.next;
return ;
}
var ptemp = temp = first;
for( ; temp; ptemp = temp ,temp= temp.next){
if(temp.data == val){
ptemp.next = temp.next;
_this.length--;
return ;
}
}
}
// --- get
_this.get = function(val){
for( var temp = first ; temp; temp= temp.next){
if(temp.data == val){
alert( temp )
}
}
}
// ---------
_this.show = function(fn) {
for(temp=first;temp;temp=temp.next) {
fn(temp.data);
}
}
return _this;
}
var linkslist = createlinklist(); // 创建一个单链表实例
linkslist.add("jelle"); // 向链表添加一个元素
linkslist.add("you");// 再次添加元素
linkslist.add(1);
function linkslist(){
var text = '';
linkslist.show(function(data){
text +='-'+ data;
});
document.getelementbyid('linkslist').value = text;
}
linkslist();
script>
body>
html>
标签:
javascript, 链表,
单链表, js实现链表
绿色通道:好文要顶关注我收藏该文与我联系



posted @ 2010-07-28 21:34
jun.lu 阅读(1941)
评论(11)编辑
收藏
发表评论
2082942
回复 引用 查看
#1楼 2010-07-28 22:18 李杰

请教下一般能应用在哪,性能方面有什么提升
回复 引用 查看
#2楼[楼主] 2010-07-28 22:34 jelle

@李杰
这个链表主要是试着去理解下常用的数据结构。
双向链表应用还是很广的。
性能方面。如果针对频繁的插入或者删除相对数组的效率会高一些。
主要还是学习吧!
回复 引用 查看
#3楼 2010-07-29 00:12 snake@net

@李杰
just 4 fun.
回复 引用
#4楼 2010-07-29 00:57 游客1[未注册用户]
如何在新位置插入节点呢?
回复 引用 查看
#5楼 2010-07-29 10:08 亚历山大同志

可以用来给学生演示链表的原理................................
回复 引用 查看
#6楼[楼主] 2010-07-29 10:16 jelle

@亚历山大同志
果然把 大牛请请出来了。呵呵。你没觉得js实现看起来好简单吗?
我家里的朋友说,他也没想到 上面加粗的一行 代码。居然就实现了链表的add方法。
回复 引用 查看
#7楼[楼主] 2010-07-29 10:23 jelle

@游客1
如果直接向链表的末端添节点。直接使用add 方法就可以。
如果是向链表的中间添加节点,只需要改变 两个相邻节点的 指向域 即可插入一个节点到 这两个节点的中间位置。
回复 引用
#8楼 2010-07-29 11:03 diryboy+[未注册用户]
这个是从头部插入的吧,最后插入的是first
回复 引用 查看
#9楼[楼主] 2010-07-29 11:16 jelle

@diryboy+
嗯是的,是的。是一个向前的链表!
回复 引用 查看
#10楼 2011-04-29 10:20 新志

刚看到例子时,感觉想不通。仔细研究了一下,才明白是怎么回事。
关键是这一句:
first = {data:val, next: first || null};
创建对象时,next引用了first当前的对象,然后,新的对象又赋给了first。
回复 引用 查看
#11楼[楼主] 2011-04-29 10:22 jelle

@新志
呵呵
刷新评论列表刷新页面返回页首
发表评论
昵称:
[登录]
[注册]
主页:
邮箱:(仅博主可见)
验证码:看不清。

换一个
评论内容:
记住我的昵称和主页
-->
登录注册
[使用ctrl+enter键快速提交评论]
0
1787351
j+ymb8wi9ku=
首页博问闪存新闻园子招聘知识库
最新it新闻:
·去哪儿网回应火车票诈骗事件:乃400电话所致
·中电信与交通部签协议 共同打造智慧交通
·sprint计划今年在11大城市商用lte
·ces 2012 开展前演讲:2012 年用户界面为
·12位技术领袖的新年决心(10)telsa motors和spacex的ceo elon musk– 再一次引爆电动汽车市场
»
更多新闻...
最新知识库文章:
·持续集成之“everything is code”
·持续集成之“软件自我识别”
·持续集成之戏说check-in dance
·什么是闭包。

我的理解
·什么是闭包(closure)?
»
更多知识库文章...



china-pub 2011秋季教材巡展
china-pub 计算机绝版图书按需印刷服务

======================================================

在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定
这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐