使用JavaScript实现链表的数据结构的代码


Posted in Javascript onAugust 02, 2017

链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)   — 维基百科

上面是维基百科对 链表 的解读。下面我们用 JavaScript 代码对链表的数据结构进行实现

实现Node类表示节点

/**
 * Node 类用来表示节点
 * element 用来保存节点上的数据
 * next 用来保存指向下一个节点的链接
 */
function Node(element) {
 this.element = element;
 this.next = null;
}
LList类提供对链表操作的方法
/**
 * LList 类提供了对链表进行操作的方法
 * 链表只有一个属性,
 * 使用一个 Node 对象来保存该链表的头节点。
 */
class LList {
 constructor() {
  this.head = new Node('head');
 }
 // 查找节点
 find(item) {
  let currNode = this.head;
  while(currNode.element !== item) {
   currNode = currNode.next;
  }
  return currNode;
 }
 // 查找前一个节点
 findPre(item) {
  if(item === 'head') throw new Error('now is head!');
  let currNode = this.head;
  while (currNode.next && currNode.next.element !== item) {
   currNode = currNode.next;
  }
  return currNode;
 }
 // 插入新节点
 insert(newElement, item) {
  let newNode = new Node(newElement);
  let currNode = this.find(item);
  newNode.next = currNode.next;
  currNode.next = newNode;
 }
 // 删除一个节点
 remove(item) {
  let preNode = this.findPre(item);
  if(preNode.next !== null) {
   preNode.next = preNode.next.next;
  }
 }
 // 显示链表中的元素
 display() {
  let currNode = this.head;
  while(currNode.next !== null) {
   console.log(currNode.next.element);
   currNode = currNode.next;
  }
 }
}

测试代码

const list = new LList(); 
// LList { head: Node { element: 'head', next: null } }
list.insert('0', 'head');
list.insert('1', '0');
list.insert('2', '1');
list.insert('3', '2');
list.remove('1');
console.log(list); 
// LList { head: Node { element: 'head', next: Node { element: '0', next: [Object] } } }
console.log(list.display()); // 0 2 3
console.log(list.findPre('1')); 
// Node { element: '0', next: Node { element: '1', next: Node { element: '2', next: [Object] } } }

上面就是用JavaScript对简单链表的数据结构的简单实现:smile:

总结

以上所述是小编给大家介绍的使用JavaScript实现链表的数据结构的代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
从JavaScript 到 JQuery (1)学习小结
Feb 12 Javascript
JavaScript prototype对象的属性说明
Mar 13 Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
Apr 25 Javascript
jQuery制作仿腾讯web qq用户体验桌面
Aug 20 Javascript
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
Dec 17 Javascript
jQuery基于正则表达式的表单验证功能示例
Jan 21 Javascript
jQuery实现遍历复选框的方法示例
Mar 06 Javascript
VUE element-ui 写个复用Table组件的示例代码
Nov 18 Javascript
关于Vue的路由权限管理的示例代码
Mar 06 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
Jul 28 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
Apr 03 Javascript
Vue 动态组件components和v-once指令的实现
Aug 30 Javascript
javascript 取小数点后几位几种方法总结
Aug 02 #Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
Aug 02 #Javascript
jQuery接受后台传递的List的实例详解
Aug 02 #jQuery
angular $watch 一个变量的变化(实例讲解)
Aug 02 #Javascript
浅谈ECMAScript6新特性之let、const
Aug 02 #Javascript
js实现前端图片上传即时预览功能
Aug 02 #Javascript
使用JavaScript实现表格编辑器(实例讲解)
Aug 02 #Javascript
You might like
php中eval函数的危害与正确禁用方法
2014/06/30 PHP
20个2014年最优秀的PHP框架回顾
2014/10/22 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
PHP微信H5支付开发实例
2018/07/25 PHP
Jquery通过Ajax方式来提交Form表单的具体实现
2013/11/07 Javascript
js post提交调用方法
2014/02/12 Javascript
JS实现OCX控件的事件响应示例
2014/09/17 Javascript
JavaScript前补零操作实例
2015/03/11 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
2015/03/27 Javascript
JQUERY简单按钮轮换选中效果实现方法
2015/05/07 Javascript
ECMAScript中函数function类型
2015/06/03 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
2016/04/30 Javascript
基于layer.js实现收货地址弹框选择然后返回相应的地址信息
2017/05/26 Javascript
laravel5.4+vue+element简单搭建的示例代码
2017/08/29 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
浅析JavaScript 函数防抖和节流
2020/07/13 Javascript
在MAC上搭建python数据分析开发环境
2016/01/26 Python
python fabric实现远程部署
2017/01/05 Python
Python对数据进行插值和下采样的方法
2018/07/03 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
2018/08/02 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
python 获取url中的参数列表实例
2018/12/18 Python
解决pytorch DataLoader num_workers出现的问题
2020/01/14 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
2020/04/20 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
Python 忽略文件名编码的方法
2020/08/01 Python
python 用opencv实现图像修复和图像金字塔
2020/11/27 Python
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
Stella McCartney官网:成衣、包袋、香水、内衣、童装及Adidas系列
2018/12/20 全球购物
青年安全生产示范岗事迹材料
2014/05/04 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
授权委托书格式
2014/07/31 职场文书
初中学生操行评语
2014/12/26 职场文书
python数据库批量插入数据的实现(executemany的使用)
2021/04/30 Python
解决Vue+SpringBoot+Shiro跨域问题
2021/06/09 Vue.js