使用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 相关文章推荐
JQuery实现动态表格点击按钮表格增加一行
Aug 24 Javascript
jQuery实现的tab标签切换效果示例
Sep 05 Javascript
JS实现的计数排序与基数排序算法示例
Dec 04 Javascript
javascript回调函数详解
Feb 06 Javascript
浅谈如何通过node.js对数据进行MD5加密
May 16 Javascript
使用Vue实现图片上传的三种方式
Jul 17 Javascript
AngularJS中ng-options实现下拉列表的数据绑定方法
Aug 13 Javascript
JavaScript闭包与作用域链实例分析
Jan 21 Javascript
详解JavaScript作用域和作用域链
Mar 19 Javascript
vuejs移动端实现div拖拽移动
Jul 25 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
Apr 10 Javascript
解决vue $http的get和post请求跨域问题
Jun 07 Vue.js
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中使用crypt()实现用户身份验证的代码
2012/09/05 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
2013/06/25 PHP
浅谈PHP中的面向对象OOP中的魔术方法
2017/06/12 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
SWFObject 2.1以上版本语法介绍
2010/07/10 Javascript
JS 模态对话框和非模态对话框操作技巧汇总
2013/04/15 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
2014/08/20 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
2015/09/26 Javascript
第一次接触神奇的Bootstrap基础排版
2016/07/26 Javascript
JS判断iframe是否加载完成的方法
2016/08/03 Javascript
xmlplus组件设计系列之选项卡(Tabbar)(5)
2017/05/03 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
react实现换肤功能的示例代码
2018/08/14 Javascript
mpvue全局引入sass文件的方法步骤
2019/03/06 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
2020/12/02 Vue.js
Python脚本实现代码行数统计代码分享
2015/03/10 Python
Python进程通信之匿名管道实例讲解
2015/04/11 Python
对pandas的行列名更改与数据选择详解
2018/11/12 Python
Pandas Shift函数的基础入门学习笔记
2018/11/16 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
解决numpy矩阵相减出现的负值自动转正值的问题
2020/06/03 Python
keras实现多GPU或指定GPU的使用介绍
2020/06/17 Python
CSS3制作酷炫的条纹背景
2017/11/09 HTML / CSS
CAT鞋美国官网:CAT Footwear
2017/11/27 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
如何让Java程序执行效率更高
2014/06/25 面试题
医院信息公开实施方案
2014/05/09 职场文书
分公司任命书
2014/06/06 职场文书
大学专科求职信
2014/07/02 职场文书
营销总监岗位职责
2014/09/16 职场文书
通知函的格式
2015/04/27 职场文书
大学生创业,为什么都会选择快餐饮?
2019/08/08 职场文书
Python上下文管理器Content Manager
2021/06/26 Python