使用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最新动画教程+iso光盘下载
Jan 22 Javascript
关于js内存泄露的一个好例子
Dec 09 Javascript
JavaScript中的函数重载深入理解
Aug 04 Javascript
javascript中clipboardData对象用法详解
May 13 Javascript
JQuery中节点遍历方法实例
May 18 Javascript
jQuery实现可编辑的表格实例讲解(2)
Sep 17 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
Feb 08 Javascript
js实现拖拽上传图片功能
Aug 01 Javascript
关于vue-router的beforeEach无限循环的问题解决
Sep 09 Javascript
webpack 插件html-webpack-plugin的具体使用
Apr 09 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
May 19 jQuery
使用AutoJs实现微信抢红包的代码
Dec 31 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 如何利用phpexcel导入数据库
2013/08/24 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
2017/03/23 PHP
解析 thinkphp 框架中的部分方法
2017/05/07 PHP
PHP 获取 ping 时间的实现方法
2017/09/29 PHP
javascript 运算数的求值顺序
2011/08/23 Javascript
JavaScript创建类/对象的几种方式概述及实例
2013/05/06 Javascript
javascript如何使用bind指定接收者
2014/05/04 Javascript
jquery库文件略庞大用纯js替换jquery的方法
2014/08/12 Javascript
JS控制弹出新页面窗口位置和大小的方法
2015/03/02 Javascript
详解iframe与frame的区别
2016/01/13 Javascript
限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数
2016/05/27 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
浅谈React组件之性能优化
2018/03/02 Javascript
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
JavaScript async/await原理及实例解析
2020/12/02 Javascript
Vue2.x-使用防抖以及节流的示例
2021/03/02 Vue.js
python的常见命令注入威胁
2013/02/18 Python
python基础教程之对象和类的实际运用
2014/08/29 Python
python实现下载整个ftp目录的方法
2017/01/17 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
Python3 使用cookiejar管理cookie的方法
2018/12/28 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
2019/03/01 Python
基于 Django 的手机管理系统实现过程详解
2019/08/16 Python
python中单下划线(_)和双下划线(__)的特殊用法
2019/08/29 Python
django 中使用DateTime常用的时间查询方式
2019/12/03 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
2020/12/08 Python
python opencv肤色检测的实现示例
2020/12/21 Python
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
电子商务专业毕业生工作推荐信
2013/11/17 职场文书
软环境建设心得体会
2014/09/09 职场文书
公安领导班子四风问题个人整改措施思想汇报
2014/10/09 职场文书
趣味运动会通讯稿
2015/07/18 职场文书
学校少先队工作总结
2015/08/12 职场文书
导游词之江西赣州
2019/10/15 职场文书
Python基础之元组与文件知识总结
2021/05/19 Python