JavaScript封装单向链表的示例代码


Posted in Javascript onSeptember 17, 2020

使用JavaScript封装单向链表:

1. 封装LinkList的类,用于表示我们的链表结构。

2. 在LinkList类中有一个Node类,用于封装每一个节点上的信息(data与next)。

3. 在链表中保存两个属性,一个是链表的长度,一个是链表中的第一个节点。

4.封装一些链表的常用方法:

  • append(element):想列表尾部添加一个新的项;
  • insert(position,element):向列表的特定位置插入一个新的项;
  • get(position):获取对应位置的元素;
  • indexOf(element):返回元素在链表中的索引,如果链表中没有该元素则返回-1;
  • update(position,element):修改某个位置的元素;
  • removeAt(postion):从列表的特定位置移除一项;
  • remove(element):从列表中移除一项;
  • isEmpty():如果链表中不包含任何元素,返回true,否则返回false;
  • size():返回链表中包含元素的个数;
  • toString():输出链表元素的值;
<script type="text/javascript">
	function LinkList(){
		/* 节点类 */
		function Node(data){
			this.data = data
			this.next = null
		}
		
		this.head = null
		this.length = 0
		/* 追加方法 */
		LinkList.prototype.append = function(data){
			/* 创建新节点 */
			var newNode = new Node(data)
			if(this.length === 0){
				this.head = newNode
			}else{
				/* 找到最后一个节点 */
				var current = this.head
				while(current.next){
					current = current.next
				}
				current.next = newNode
			}
			this.length += 1
		}

		/* toString方法 */
		LinkList.prototype.toString = function(){
			var current = this.head
			var listString = ""
			
			while(current){
				listString += current.data +" "
				current = current.next
			}
			return listString
		}

		/* insert方法 */
		LinkList.prototype.insert = function(position,data){
			/* 对position进行越界判断 */
			if(position<0||position>this.length) return false
			var node = new Node(data)
			if(position == 0){
				node.next = this.head
				this.head = node
			}else{
				var index = 0
				var current = this.head
				var previous = null
				while(index++ < position){
					previous = current
					current = current.next
				}
				node.next = current
				previous.next = node
			}
			this.length += 1
			return true
		}
		
		/* get方法 */
		LinkList.prototype.get = function(position){
			/* 越界判断 */
			if(position<0 || position >= this.length) return null
			
			var current = this.head
			var index = 0
			while(index++ < position){
				current = current.next
			}
			return current.data
		}

		/* indexOf方法 */
		LinkList.prototype.indexOf = function(data){
			/* 定义变量 */
			var current = this.head
			var index = 0
			/* 开始查找 */
			while(current){
				if(current.data === data){
					return index
				}else{
					current = current.next
					index += 1
				}
			}
			return -1
		}

		/* update方法 */
		LinkList.prototype.update = function(position,data){
			/* 越界判断 */
			if(position<0 || position >= this.length) return false
			
			var current = this.head
			var index = 0
			while(index++ < position){
				current = current.next
			}
			/* 修改data */
			current.data = data
			return true
		}

		/* removeAt方法 */
		LinkList.prototype.removeAt = function(position){
			/* 越界判断 */
			if(position<0 || position >= this.length) return null
			var current = this.head
			if(position === 0){
				this.head = this.head.next
			}else{
				var index = 0
				var previous = null
				while(index++ < position){
					previous = current
					current = current.next
				}
				previous.next = current.next
			}
			this.length -= 1
			return current.data
		}
		
		/* remove */
		LinkList.prototype.remove = function(data){
			/* 根据data找位置 */
			var position = this.indexOf(data)
			return this.removeAt(position)
		}
		
		LinkList.prototype.isEmpty = function(){
			return this.length === 0
		}
		
		LinkList.prototype.size = function(){
			return this.length
		}
		
	}
	
	
	/* 测试 */
	var list = new LinkList()
	list.append('a')
	list.append('b')
	list.append('c')
	console.log(list.toString()) /* a b c */
	
	list.insert(3,'d')
	console.log(list.toString())/* a b c d */
	
	console.log(list.get(2)) /* c */
	console.log(list.indexOf('d')) /* 3 */
	
	list.update(1,'bbb')
	console.log(list.toString()) /* a bbb c d */
	
	console.log(list.removeAt(2)) /* c */
	console.log(list.toString())/* a bbb d */
	
	console.log(list.remove('a'))
	console.log(list.toString())/* bbb d */
	
	console.log(list.isEmpty()) /* false */
	
	console.log(list.size()) /* 2 */
</script>

以上就是JavaScript封装单向链表的示例代码的详细内容,更多关于JavaScript封装单向链表的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
根据一段代码浅谈Javascript闭包
Dec 14 Javascript
jQuery的运行机制和设计理念分析
Apr 05 Javascript
JavaScript中的noscript元素属性位置及作用介绍
Apr 11 Javascript
js打开新窗口方法整理
Feb 17 Javascript
jquery实现checkbox 全选/全不选的通用写法
Feb 22 Javascript
Js+Jq获取URL参数的集中方法示例代码
May 20 Javascript
js动态修改整个页面样式达到换肤效果
May 23 Javascript
JS弹出可拖拽可关闭的div层完整实例
Feb 13 Javascript
移动端利用H5实现压缩图片上传功能
Mar 29 Javascript
Ajax验证用户名或昵称是否已被注册
Apr 05 Javascript
JavaScript寄生组合式继承实例详解
Jan 06 Javascript
JavaScript设计模型Iterator实例解析
Jan 22 Javascript
vue修改Element的el-table样式的4种方法
Sep 17 #Javascript
vue+canvas实现拼图小游戏
Sep 18 #Javascript
JavaScript 常见的继承方式汇总
Sep 17 #Javascript
JavaScript 闭包的使用场景
Sep 17 #Javascript
javascript贪吃蛇游戏设计与实现
Sep 17 #Javascript
js实现简单的随机点名器
Sep 17 #Javascript
谈谈JavaScript中的垃圾回收机制
Sep 17 #Javascript
You might like
收听短波不可能有声音清晰的品质吗
2021/03/01 无线电
php chr() ord()中文截取乱码问题解决方法
2008/09/08 PHP
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
基于PHP一些十分严重的缺陷详解
2013/06/03 PHP
深入PHP购物车模块功能分析(函数讲解,附源码)
2013/06/25 PHP
php封装的表单验证类完整实例
2016/10/19 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
2017/07/13 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
2019/10/03 PHP
php把文件设置为插件的技巧方法
2020/02/03 PHP
利用JS延迟加载百度分享代码,提高网页速度
2013/07/01 Javascript
编写js扩展方法判断一个数组中是否包含某个元素
2013/11/08 Javascript
php显示当前文件所在的文件以及文件夹所有文件以树形展开
2013/12/13 Javascript
纯js写的分页表格数据为json串
2014/02/18 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
2014/11/17 Javascript
jQuery实现跨域
2015/02/03 Javascript
JS运动相关知识点小结(附弹性运动示例)
2016/01/08 Javascript
Bootstrap超大屏幕的实现代码
2017/03/22 Javascript
浅谈vue.js导入css库(elementUi)的方法
2018/03/09 Javascript
angularjs获取到My97DatePicker选中的值方法
2018/10/02 Javascript
Vue.js构建你的第一个包并在NPM上发布的方法步骤
2019/05/01 Javascript
vue用elementui写form表单时,在label里添加空格操作
2020/08/13 Javascript
解决Django migrate No changes detected 不能创建表的问题
2018/05/27 Python
在python里从协程返回一个值的示例
2019/02/19 Python
Python Numpy 控制台完全输出ndarray的实现
2020/02/19 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
2020/06/03 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
html5 offlline 缓存使用示例
2013/06/24 HTML / CSS
美国网上眼镜商城:Zenni Optical
2016/11/20 全球购物
十一个高级MySql面试题
2014/10/06 面试题
20年同学聚会邀请函
2014/02/04 职场文书
动漫专业高职生职业生涯规划书
2014/02/15 职场文书
金融事务专业毕业生求职信
2014/02/23 职场文书
给老婆的保证书范文
2014/04/28 职场文书
走群众路线学习笔记
2014/11/06 职场文书
2014年党风廉政工作总结
2014/12/03 职场文书