数据结构之链表的js实现
一、链表
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点组成,
对于链表来说删除或添加一个元素是非常方便的,除了数据的随机访问(可以实现但是比较麻烦,比如可以通过添加和操作索引值来实现),它几乎可以用在任何可以使用一维数组的情况中
单向链表:每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
双向链表:每一个节点包含三个:指向上一个节点的地址、内容、指向下一个节点的地址。被称为:直接后继和直接前驱。头节点没有直接前驱、尾节点没有直接后继。
循环链表:和双向列表一样,头节点的前继指向尾节点,尾节点的后驱指向头节点。
链表的实现:类似于嵌套,将下一个内容的对象赋值给this.next()
通过一个类实现链表节点:
class Node {
constructor(data) {
this.data = data; // 节点的数据
this.prev = null; // 节点的前项
this.next = null; // 节点的后项
}
}
定义链表:(最好将方法定义在链表的原型对象上)
class SingleList {
constructor() {
this.size = 0; // 单链表的长度
this.head = new Node('head'); // 表头节点
this.currNode = ''; // 当前节点的指向
}
}
实现 find(item) { } // 在单链表中寻找item元素
insert(item, element) { } // 向单链表中插入元素
remove(item) { } // 在单链表中删除一个节点
append(element) { } // 在单链表的尾部添加元素
findLast() { } // 获取单链表的最后一个节点
isEmpty() { } // 判断单链表是否为空
show() { } // 显示当前节点
getLength() { } // 获取单链表的长度
advance(n, currNode) { } // 从当前节点向前移动n个位置
display() { } // 单链表的遍历显示
clear() { } // 清空单链表
实现了这些方法后,就形成了链表数据结构的大概框架了。
插入方法:
SingleList.prototype = {
find: function (item) { // 在单链表中寻找item元素
//将头节点取出来,冲头节点开始遍历
var currNode = this.head;
//当currNode为空或者找到这个值的时候就停止返回
while (currNode.data != item) {
//递归遍历
currNode = currNode.next
}
//返回为找到的值或者为空
return currNode
},
findPrevious: function (item) {//寻找某节点的前一个节点
var currNode = this.head;
// 循环遍历,知道某节点的下一个节点内容相等
while (currNode.next != ittem) {
currNode = currNode.next
}
return currNode
},
insert: function (item, element) {// 向element单链表中插入元素
//定义一个新节点
var newNode = new Node(item)
//找到要插入的节点位置
var current = this.find(element)
//进行节点的改变,插入
newNode.next = current.next
current.next = newNode
},
remove: function (item) {// 在单链表中删除一个节点
//寻找某个节点的前一个节点,将next移除
var preNode = this.findPrevious(item)
if (preNode.next != null) {
preNode.next = preNode.next.next
}
},
display: function () { //打印所有元素
var currNode = this.head
while (currNode.next != null) {
console.log(currNode.next.data);
currNode = currNode.next
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本