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

【分享】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;" οnclick="linkslist.add(document.getelementbyid('linkslins_test').value);linkslist();">

input type=button value="del" style="width:70px; height:22px;" οnclick="linkslist.del(document.getelementbyid('linkslins_test').value);linkslist();">

input type=button value="get" style="width:70px; height:22px;" οnclick="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^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值