js单链表查找原理?
链表的起源
一、链表的由来
我们接触最多的数据存储结构应该是数组,它在实际场景中出现的频率非常高,但并不适合所有情况。这也是一个链表
原因如下:
在许多编程语言中,数组的长度是固定的,所以当数组充满数据时,添加新元素是非常困难的。
在数组中添加和删除元素很麻烦,因为数组中的其他元素需要向前或向后平移。
Javascript中数组的主要问题是作为对象实现,相比其他语言(如C和Java)中的数组效率较低。
为了解决以上问题,如果在实际使用中发现数组比较慢,可以考虑改用链表。除了对数据的随机访问,链表几乎可以用于任何可以使用一维数组的场合。如果需要频繁的删除和添加操作,主动考虑链表吧~
1.1特点
优势
链表结构可以充分利用计算机内存空间,实现灵活的动态内存管理。
添加数据和删除数据很容易。
链表中的每个元素实际上都是一个独立的对象,所有对象都通过每个元素中的引用字段链接在一起。
缺点?
访问时间是线性的(而且很难流水线化),更快的访问,比如随机访问,是不可行的。与链表相比,数组有更好的缓存位置。
失去了随机读取数组的优势,而且因为增加了节点的指针字段,链表的空间开销也比较大。
链表有许多不同的类型:单向链表、双向链表和循环链表。链表可以用许多编程语言实现。以下代码全部用Js实现。如有不妥,请指正。我们鼓励你。
第二,单链表
单个链表中的每个节点不仅包含一个值,还包含一个链接到下一个节点的引用字段。通过这种,单个链表按顺序组织所有节点。、
下面是一个单链表的例子:
当你得到了头节点,你就得到了整个列表。
我们创建单个节点的操作应该如下所示:
2.1添加节点
就像打绳结一样,加一个节点就是在两个结之间打一个新结。
如果我们想在给定的节点prev后添加一个新值,我们应该:
创建要插入的节点cur。
将cur节点的下一个链接到下一个节点(pre的下一个节点)
将下一个pre链接到cur节点。
在开头添加一个节点
众所周知,我们用head节点来表示整个列表。
因此,在列表的开头添加新节点时,更新head节点head是非常重要的。
初始化新节点cur;
将新节点cur的下一个链接到我们原来的头节点。
将下一个头节点链接到cur,也就是说,是的。
在末尾添加一个节点
创建新的节点cur
只需将链表最后一个节点的下一个链接到cur。
2.2删除节点
如果我们想删除指定的节点cur,我们应该这样做:
查找cur的上一个节点prev及其下一个节点(要删除的节点)。
把链接给`,也就是跳过删除节点。
注意:必须从头节点遍历到指定节点,删除节点的平均时间复杂度为O(N)。
删除最后一个节点
找到下一个节点链接为空的节点,以及它的前一个节点。
仅链接空
第三,设计链表
以LeetCod
如何实现用javascript把地图可视化?
对于JS开发人员来说,可视化数据的能力与制作交互式网页一样重要。特别是两者经常同时出现。在数据中使用Javascript随着可视化领域的普及,甚至会有新的库可以为Web创建漂亮的图表。
可视化需要考虑许多因素:
我想要什么样的图表?饼状图,地理图,折线图,条形图?
有些库只支持几种类型。首先,你要知道自己真正需要的是什么。
数据集有多大?
基于SVG的库通常更适合中小型数据集,因为每个元素都是唯一的节点,存在于DOM树中。这也意味着允许直接访问它们,这使得它们更加灵活。虽然您可以使用一些数据聚合算法、智能内存管理和其他花哨的技术来处理大型数据集,但使用基于Canvas的大型数据集工具是更可靠的选择。帆布速度很快。
该应用程序是Web应用程序、移动应用程序还是两者都有?
有些库响应速度更快,有些库有自己版本的ReactNative,比如Victory。
浏览器支持给定的库吗?
你用的是什么样的Javascript框架?
确保您的数据库库能够顺利运行。如果您正在使用React,使用React特定的库可能比使用包装器更好。
你需要什么样的外貌?
如果需要一些高级动画,也要考虑这个。
能够回答上面提到的问题将会很容易找到一个完美的开源解决方案。
1、D3.js
适用于:任何环境
GitHub:
2、退货
适用于:反应
GitHub:
3、胜利
适用于:反应,反应原生
4、反作用
适用于:反应
5、ApexCharts
适用于:React,Vue.js,纯Javascript。
GitHub:
越来越多的数据可视化库证明了Web可视化的重要性。希望这个列表能帮助你在以后的项目中创造出漂亮的图表。祝你好运!