使用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一些不错的函数脚本代码
Sep 10 Javascript
HTML node相关的一些资料整理
Jan 01 Javascript
JavaScript Event学习第二章 Event浏览器兼容性
Feb 07 Javascript
jQuery下的动画处理总结
Oct 10 Javascript
jquery禁用右键示例
Apr 28 Javascript
浅谈javascript中call()、apply()、bind()的用法
Apr 20 Javascript
canvas绘制多边形
Feb 24 Javascript
JS控件bootstrap suggest plugin使用方法详解
Mar 25 Javascript
Angular 2 利用Router事件和Title实现动态页面标题的方法
Aug 23 Javascript
基于js 各种排序方法和sort方法的区别(详解)
Jan 03 Javascript
js中int和string数据类型互相转化实例
Jan 16 Javascript
jquery制作的移动端购物车效果完整示例
Feb 24 jQuery
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 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
php中动态修改ini配置
2014/10/14 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
2016/08/01 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
2016/11/15 PHP
js css样式操作代码(批量操作)
2009/10/09 Javascript
自制轻量级仿jQuery.boxy对话框插件代码
2010/10/26 Javascript
菜鸟学习JavaScript小实验之函数引用
2010/11/17 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
js 获取、清空input type="file"的值(示例代码)
2013/12/24 Javascript
javascript HTML5文件上传FileReader API
2020/03/27 Javascript
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
详解Angular6学习笔记之主从组件
2018/09/05 Javascript
判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号
2019/04/28 Javascript
vue项目中mock.js的使用及基本用法
2019/05/22 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
2020/07/14 jQuery
JavaScript实现HTML导航栏下拉菜单
2020/11/25 Javascript
[02:27]刀塔重生降临
2015/10/14 DOTA
Python中的对象,方法,类,实例,函数用法分析
2015/01/15 Python
Windows和Linux下Python输出彩色文字的方法教程
2017/05/02 Python
Python实现类的创建与使用方法示例
2017/07/25 Python
浅谈python中的数字类型与处理工具
2017/08/02 Python
对python 自定义协议的方法详解
2019/02/13 Python
20行python代码实现人脸识别
2019/05/05 Python
Django REST Framework序列化外键获取外键的值方法
2019/07/26 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
2019/08/27 Python
Python shelve模块实现解析
2019/08/28 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
Numpy一维线性插值函数的用法
2020/04/22 Python
pandas.DataFrame.drop_duplicates 用法介绍
2020/07/06 Python
keras实现VGG16方式(预测一张图片)
2020/07/07 Python
全球领先的美容用品专卖店:Beauty Plus Salon
2018/09/04 全球购物
公司委托书格式范文
2014/10/09 职场文书
电信营业员岗位职责
2015/04/14 职场文书
城南旧事电影观后感
2015/06/16 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书
nginx中proxy_pass各种用法详解
2021/11/07 Servers