使用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的内存泄漏
Mar 04 Javascript
ToolTips JQEURY插件之简洁小提示框效果
Nov 19 Javascript
javascript 数组操作详解
Jan 29 Javascript
jQuery查看选中对象HTML代码的方法
Jun 17 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
Aug 16 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
Feb 08 Javascript
vue表单绑定实现多选框和下拉列表的实例
Aug 12 Javascript
vue2导航根据路由传值,而改变导航内容的实例
Nov 10 Javascript
angular 服务的单例模式(依赖注入模式下)详解
Oct 22 Javascript
vue轮播组件实现$children和$parent 附带好用的gif录制工具
Sep 26 Javascript
如何基于javascript实现贪吃蛇游戏
Feb 09 Javascript
jquery实现图片放大镜效果
Dec 23 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
导航跟随滚动条置顶移动示例代码
2013/09/11 Javascript
js 对小数加法精度处理示例说明
2013/12/27 Javascript
jQuery获取样式中颜色值的方法
2015/01/29 Javascript
JavaScript函数参数使用带参数名的方式赋值传入的方法
2015/03/19 Javascript
js获取隐藏元素宽高的实现方法
2016/05/19 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
2016/09/05 Javascript
Vue实现动态响应数据变化
2017/04/28 Javascript
解决React Native端口号修改的方法
2017/07/28 Javascript
JS实现的ajax和同源策略(实例讲解)
2017/12/01 Javascript
自定义vue组件发布到npm的方法
2018/05/09 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
js 图片懒加载的实现
2020/10/21 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
2020/10/28 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
python中实现k-means聚类算法详解
2017/11/11 Python
django使用html模板减少代码代码解析
2017/12/12 Python
python查询mysql,返回json的实例
2018/03/26 Python
在python 中实现运行多条shell命令
2019/01/07 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
为什么称python为胶水语言
2020/06/16 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
2021/03/02 Python
BLACKMORES澳洲官网:澳大利亚排名第一的保健品牌
2018/09/27 全球购物
Fanatics法国官网:美国体育电商
2019/08/27 全球购物
英语专业毕业生求职简历的自我评价
2013/10/24 职场文书
宿舍违规用电检讨书
2014/02/16 职场文书
管理部副部长岗位职责范文
2014/03/09 职场文书
阳光体育活动总结
2014/04/30 职场文书
农行心得体会
2014/09/02 职场文书
销售2014年度工作总结
2014/12/08 职场文书
基层党建工作简报
2015/07/21 职场文书
小学思想品德教学反思
2016/02/24 职场文书
golang goroutine顺序输出方式
2021/04/29 Golang
python区块链持久化和命令行接口实现简版
2022/05/25 Python