当前位置: 首页 > news >正文

河北怀来县建设局网站搜索引擎优化服务公司哪家好

河北怀来县建设局网站,搜索引擎优化服务公司哪家好,柳州正规网站制作公司,wordpress评论框制作什么是链表 链表是一种线性数据结构,与数组类似,它用于存储一系列元素。不过,与数组在内存中连续存储元素不同,链表中的元素(称为节点)在内存中可以是非连续存放的。每个节点包含两部分:一部分…

什么是链表

链表是一种线性数据结构,与数组类似,它用于存储一系列元素。不过,与数组在内存中连续存储元素不同,链表中的元素(称为节点)在内存中可以是非连续存放的。每个节点包含两部分:一部分存储数据,另一部分存储指向下一个节点的引用(或指针)。最后一个节点的指针通常指向 null,表示链表结束。

假设我们要创建一个链表来存储一系列整数。链表的第一个节点(头节点)存储数字 1,第二个节点存储数字 2,以此类推。

节点1 -> 节点2 -> 节点3 -> ... -> 节点n
|     |     |           |         |
|-----|-----|-----------|---------|
| 1   | →   |     2     | → ... → |
| next|     | next     |         |

在这个例子中,每个节点包含两个部分:

  • 数据部分(如 1, 2, … n)
  • 指向下一个节点的指针(next)

优点

  1. 动态大小:链表可以根据需要动态地增加或减少节点,无需预先分配固定大小的内存。
  2. 高效插入与删除:在链表中插入或删除一个元素,只需更改相邻节点之间的指针,时间复杂度可以达到 O(1),而数组中插入或删除元素可能需要移动大量元素。
  3. 内存利用率高:因为链表只在需要时分配节点,不会造成内存空间的浪费,特别适合存储大量但不确定数量的数据。

缺点

  1. 访问速度较慢:访问链表中的某个元素需要从头节点开始,逐个遍历直至找到目标节点,时间复杂度为 O(n),而数组可以通过索引直接访问,时间复杂度为 O(1)。
  2. 额外的存储开销:每个节点除了存储数据外,还需额外的空间来存储指向下一个节点的指针。
  3. 不支持随机访问:链表不能像数组那样通过索引直接访问元素,降低了某些操作的效率。
  4. 内存碎片:频繁的插入和删除可能导致内存空间碎片化。

综上所述,链表结构在处理需要频繁插入和删除操作,且不需要快速随机访问数据的场景下更为高效,但在需要快速访问特定位置数据的应用中,其性能不如数组。

编码实战

demo

demo地址: https://tiandisheng.top/utils/music-list
在这里插入图片描述

核心代码

// LinkedList.js
class ListNode {data: any;next: any;constructor(data) {this.data = data;this.next = null;}
}class LinkedList {head: any;constructor() {this.head = null;}// 返回链表长度length() {let current = this.head;let count = 0;while (current) {count++;current = current.next;}return count;}/*** 新增*/append(data) {const newNode = new ListNode(data);if (!this.head) {this.head = newNode;} else {let current = this.head;while (current.next) {current = current.next;}current.next = newNode;}}/*** 删除*/remove(data) {if (!this.head) return;if (this.head.data === data) {this.head = this.head.next;return;}let current = this.head;while (current.next && current.next.data !== data) {current = current.next;}if (current.next) {current.next = current.next.next;}}/*** 在指定位置插入数据*/insertAt(data, position) {if (position < 0 || position > this.length()) {console.error('Insert position is out of range.');return;}const newNode = new ListNode(data);if (position === 0) {newNode.next = this.head;this.head = newNode;} else {let current = this.head;let prev = null;for (let i = 0; i < position; i++) {prev = current;current = current.next;}newNode.next = current;prev.next = newNode;}}/*** 置顶* @param {*} data 要置顶的节点的数据*/moveToTop(data) {if (!this.head) return; // 链表为空时无需操作// 如果头节点就是要置顶的节点,则无需操作if (this.head.data === data) return;// 首先尝试找到待置顶节点及其前驱节点let current = this.head;let prev = null;while (current && current.data !== data) {prev = current;current = current.next;}if (!current) return; // 数据不存在于链表中// 如果找到了待置顶的节点if (prev) {// 从原位置删除节点prev.next = current.next;} else {// 如果是头节点,则直接更新headthis.head = current.next;}// 插入到头部current.next = this.head;this.head = current;}toArray() {let current = this.head;const array: any[] = [];while (current) {array.push(current.data);current = current.next;}return array;}/*** @function 将"数组结构"的数据转换为"链表结构"的数据*/arrayToLinkList(arrayData: any[]) {const newLinkList = new LinkedList();arrayData.forEach((i) => {newLinkList.append(i);});return newLinkList;}/*** @function 将当前链表数据转换为一个新的链表副本*/createCopy() {return this.arrayToLinkList(this.toArray());}
}export { LinkedList };
http://www.cadmedia.cn/news/1203.html

相关文章:

  • 巩义网站推广优化临沂seo顾问
  • 前端开发做什么短视频seo推广隐迅推专业
  • 沧州网站建设优化公司泉州seo报价
  • 网站建设都怎么找客户的西安百度提升优化
  • 甘肃自助建站系统怎么用北京seo优化公司
  • 做网站首页ps中得多大网络推广教程
  • 凉山州建设局网站济南网站建设
  • 浙江省住建和城乡建设厅官方网站怎么搭建自己的网站
  • 海南房产安卓优化大师官方版
  • 个人网站建设规划表市场推广工作内容
  • 河北网站快速排名建设百度一下官网
  • 合肥营销网站建设设计百度账号客服
  • wordpress合并css和js文件天猫seo搜索优化
  • 天津黑曼巴网站建设发布新闻最快的网站
  • 三一重工的网站是哪家做的长春网络推广优化
  • 建设网站需要多少钱常用的网络营销方法及效果
  • 教育网站建设备案网站快速排名推荐
  • 礼县建设局网站网站优化的方式有哪些
  • 基于淘宝的网站开发分析seo诊断工具网站
  • 长兴建设局网站长沙网站制作
  • 凡科建站的优缺点网上做推广怎么收费
  • 建设集团企业网站seo推广优化工具
  • 政府网站安全建设 新闻广州品牌营销策划公司排名
  • 济南专业网站建设哪家便宜企业查询宝
  • 贵州建站互联网科技有限公司电商平台怎么注册
  • 一站式网站建设业务建设网站的步骤
  • 中华室内设计网全国客服电话seo 适合哪些行业
  • 引航博景网站做的好吗seo关键词软件
  • 郑州网站公司网络营销的发展现状如何
  • 自己建一个网站怎么赚钱seo网站诊断顾问