JavaScript数据结构之链表
什么是JavaScript数据结构的链表,链表和数组有什么区别,链表删除节点,插入节点
·
什么是链表
链表是由一组节点组成的集合。每个节点都使用一个对象的引用指向它的后继。指向另一个节点的引用叫做链。如图:


链表和数组的区别
| 数组 | 链表 | |
|---|---|---|
| 定义 | 数组又叫做顺序表,顺序表是在内存中开辟一段连续的空间来存储数据,数组可以处理一组数据类型相同的数据,但不允许动态定义数组的大小,即在使用数组之前必须确定数组的大小。 | 链表是一种常见的数据组织形式,它采用动态分配内存的形式实现。链表是靠指针来连接多块不连续的的空间,在逻辑上形成一片连续的空间来存储数据。需要时可以用new分配内存空间,不需要时用delete将已分配的空间释放,不会造成内存空间的浪费。 |
| 逻辑结构 | 数组必须事先定义固定的长度,不能适应数据动态地增减情况。当数据增加时,可能超出数组原先定义的数组的长度;当数据减少时,浪费内存。 | 链表可以动态地进行存储分配;可以适应数据动态增减情况。 |
| 内存存储 | 数组是从栈中分配空间,对于程序员方便快速,自由度小。 | 链表是从堆中分配空间,自由度大但是申请管理比较麻烦。 |
| 访问顺序 | 数组中的数据是按顺序来存储的,要访问数组的元素需要按照索引来访问,速度比较快,如果对他进行插入删除操作的话,就得移动很多元素,所以对数组进行插入操作效率低。 | 链表是随机存储的,由于链表是随机存储的,链表在插入,删除操作上有很高的效率(相对数组),如果要访问链表中的某个元素的话,那就得从链表的头逐个遍历,直到找到所需要的元素为止,所以链表的随机访问的效率比数组要低。 |
链表删除节点和插入节点
删除节点
原理:从链表中删除一个元素也很简单,将待删除元素的前驱节点指向待删除元素的后继节点,同时将待删除元素指向null,元素就删除成功了。
例如:删除链表中某个特定的节点
var deleteNode = function (node) {
node.val = node.next.val//将要删除节点的下一个节点的值覆盖自己的值Ï
node.next = node.next.next//让当前节点指向下一个节点的next
}
插入节点
**原理:**向链表中插入一个节点,需要修改它前面的节点(前驱),使其指向新加入的节点,而新加入的节点则指向原来前驱指向的节点。
function insert(newElement,item){
var newNode = new Node(newElement);
var currentNode = this.find(item);
newNode.next = currentNode.next;
currentNode.next = newNode;
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)