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

全国疫情中高风险地区重庆镇海seo整站优化价格

全国疫情中高风险地区,重庆镇海seo整站优化价格,网站标题改了,用数据库做动态网站内存空间是所有程序的公共资源,在一个复杂的系统运行环境下,空闲的内存空间可能散落在内存各处。我们知道,存储数组的内存空间必须是连续的,而当数组非常大时,内存可能无法提供如此大的连续空间。此时链表的灵活性优势…

内存空间是所有程序的公共资源,在一个复杂的系统运行环境下,空闲的内存空间可能散落在内存各处。我们知道,存储数组的内存空间必须是连续的,而当数组非常大时,内存可能无法提供如此大的连续空间。此时链表的灵活性优势就体现出来了。

链表(linked list)是一种线性数据结构,其中的每个元素都是一个节点对象,各个节点通过“引用”相连接。引用记录了下一个节点的内存地址,通过它可以从当前节点访问到下一个节点。

链表的设计使得各个节点可以被分散存储在内存各处,它们的内存地址是无须连续的。

观察上图 ,链表的组成单位是节点 (node)对象。每个节点都包含两项数据:节点的“值”和指向下一节点的“引用”。

  • 链表的首个节点被称为“头节点”,最后一个节点被称为“尾节点”。
  • 尾节点指向的是“空”,它在 Java、C++ 和 Python 中分别被记为 \(\text{null}\)、\(\text{nullptr}\) 和 \(\text{None}\) 。
  • 在 C、C++等支持指针的语言中,上述的“引用”应被替换为“指针”。

 如以下代码所示,链表节点 ListNode 除了包含值,还需额外保存一个引用(指针)。因此在相同数据量下,链表比数组占用更多的内存空间

/* 链表节点结构体 */
struct ListNode {int val;         // 节点值ListNode *next;  // 指向下一节点的指针ListNode(int x) : val(x), next(nullptr) {}  // 构造函数
};

5.1 链表常用操作

5.1.1 初始化链表

 建立链表分为两步,第一步是初始化各个节点对象,第二步是构建引用指向关系。初始化完成后,我们就可以从链表的头节点出发,通过引用指向 next 依次访问所有节点。

/* 初始化链表 1 -> 3 -> 2 -> 5 -> 4 */
// 初始化各个节点
ListNode* n0 = new ListNode(1);
ListNode* n1 = new ListNode(3);
ListNode* n2 = new ListNode(2);
ListNode* n3 = new ListNode(5);
ListNode* n4 = new ListNode(4);
// 构建引用指向
n0->next = n1;
n1->next = n2;
n2->next = n3;
n3->next = n4;

数组整体是一个变量,比如数组 nums 包含元素 nums[0] 和 nums[1] 等,而链表是由多个独立的节点对象组成的。我们通常将头节点当作链表的代称,比如以上代码中的链表可被记做链表 n0 。

5.1.2 插入节点

在链表中插入节点非常容易。如下图所示,假设我们想在相邻的两个节点 n0 和 n1 之间插入一个新节点 P ,则只需要改变两个节点引用(指针)即可,时间复杂度为O(1)。

相比之下,在数组中插入元素的时间复杂度为O(n),在大数据量下的效率较低。

/* 在链表的节点 n0 之后插入节点 P */
void insert(ListNode *n0, ListNode *P) {ListNode *n1 = n0->next;P->next = n1;n0->next = P;
}

5.1.3 删除节点

如下图所示,在链表中删除节点也非常方便,只需改变一个节点的引用(指针)即可。请注意,尽管在删除操作完成后节点 P 仍然指向 n1 ,但实际上遍历此链表已经无法访问到 P ,这意味着 P 已经不再属于该链表了。

/* 删除链表的节点 n0 之后的首个节点 */
void remove(ListNode *n0) {if (n0->next == nullptr)return;// n0 -> P -> n1ListNode *P = n0->next;ListNode *n1 = P->next;n0->next = n1;// 释放内存delete P;
}

5.1.4 访问节点

在链表访问节点的效率较低。如上节所述,我们可以在 \(O(1)\) 时间下访问数组中的任意元素。链表则不然,程序需要从头节点出发,逐个向后遍历,直至找到目标节点。也就是说,访问链表的第 i个节点需要循环i - 1轮,时间复杂度为 O(n) 。

/* 访问链表中索引为 index 的节点 */
ListNode *access(ListNode *head, int index) {for (int i = 0; i < index; i++) {if (head == nullptr)return nullptr;head = head->next;}return head;
}

5.1.5 查找节点

遍历链表,查找链表内值为 target 的节点,输出节点在链表中的索引。此过程也属于线性查找。

/* 在链表中查找值为 target 的首个节点 */
int find(ListNode *head, int target) {int index = 0;while (head != nullptr) {if (head->val == target)return index;head = head->next;index++;}return -1;
}

5.2 数组 VS 链表

下表总结对比了数组和链表的各项特点与操作效率。由于它们采用两种相反的存储策略,因此各种性质和操作效率也呈现对立的特点。

5.3 常见链表类型

如下图所示,常见的链表类型包括三种。

  • 单向链表:即上述介绍的普通链表。单向链表的节点包含值和指向下一节点的引用两项数据。我们将首个节点称为头节点,将最后一个节点称为尾节点,尾节点指向空 \(\text{None}\) 。
  • 环形链表:如果我们令单向链表的尾节点指向头节点(即首尾相接),则得到一个环形链表。在环形链表中,任意节点都可以视作头节点。
  • 双向链表:与单向链表相比,双向链表记录了两个方向的引用。双向链表的节点定义同时包含指向后继节点(下一个节点)和前驱节点(上一个节点)的引用(指针)。相较于单向链表,双向链表更具灵活性,可以朝两个方向遍历链表,但相应地也需要占用更多的内存空间。
/* 双向链表节点结构体 */
struct ListNode {int val;         // 节点值ListNode *next;  // 指向后继节点的指针ListNode *prev;  // 指向前驱节点的指针ListNode(int x) : val(x), next(nullptr), prev(nullptr) {}  // 构造函数
};

5.4 链表典型应用

单向链表通常用于实现栈、队列、哈希表和图等数据结构。

  • 栈与队列:当插入和删除操作都在链表的一端进行时,它表现出先进后出的的特性,对应栈;当插入操作在链表的一端进行,删除操作在链表的另一端进行,它表现出先进先出的特性,对应队列。
  • 哈希表:链地址法是解决哈希冲突的主流方案之一,在该方案中,所有冲突的元素都会被放到一个链表中。
  • :邻接表是表示图的一种常用方式,在其中,图的每个顶点都与一个链表相关联,链表中的每个元素都代表与该顶点相连的其他顶点。

双向链表常被用于需要快速查找前一个和下一个元素的场景。

  • 高级数据结构:比如在红黑树、B 树中,我们需要访问节点的父节点,这可以通过在节点中保存一个指向父节点的引用来实现,类似于双向链表。
  • 浏览器历史:在网页浏览器中,当用户点击前进或后退按钮时,浏览器需要知道用户访问过的前一个和后一个网页。双向链表的特性使得这种操作变得简单。
  • LRU 算法:在缓存淘汰算法(LRU)中,我们需要快速找到最近最少使用的数据,以及支持快速地添加和删除节点。这时候使用双向链表就非常合适。

循环链表常被用于需要周期性操作的场景,比如操作系统的资源调度。

  • 时间片轮转调度算法:在操作系统中,时间片轮转调度算法是一种常见的 CPU 调度算法,它需要对一组进程进行循环。每个进程被赋予一个时间片,当时间片用完时,CPU 将切换到下一个进程。这种循环的操作就可以通过循环链表来实现。
  • 数据缓冲区:在某些数据缓冲区的实现中,也可能会使用到循环链表。比如在音频、视频播放器中,数据流可能会被分成多个缓冲块并放入一个循环链表,以便实现无缝播放。

文章转载自:
http://partial.qnzk.cn
http://amusedly.qnzk.cn
http://quinquevalence.qnzk.cn
http://catchment.qnzk.cn
http://revisal.qnzk.cn
http://splatch.qnzk.cn
http://basnet.qnzk.cn
http://revivatory.qnzk.cn
http://gendarmerie.qnzk.cn
http://audacity.qnzk.cn
http://baronet.qnzk.cn
http://aeromarine.qnzk.cn
http://subfamily.qnzk.cn
http://cruelty.qnzk.cn
http://radiance.qnzk.cn
http://demulsibility.qnzk.cn
http://mediumistic.qnzk.cn
http://miracidium.qnzk.cn
http://metanephros.qnzk.cn
http://responder.qnzk.cn
http://phytane.qnzk.cn
http://blastoff.qnzk.cn
http://redfish.qnzk.cn
http://bors.qnzk.cn
http://synthesizer.qnzk.cn
http://pheasantry.qnzk.cn
http://book.qnzk.cn
http://yetorofu.qnzk.cn
http://talmudic.qnzk.cn
http://electrommunication.qnzk.cn
http://papule.qnzk.cn
http://glumose.qnzk.cn
http://stiffness.qnzk.cn
http://sprinter.qnzk.cn
http://ellipse.qnzk.cn
http://codability.qnzk.cn
http://toilless.qnzk.cn
http://poisonous.qnzk.cn
http://influx.qnzk.cn
http://sonarman.qnzk.cn
http://seersucker.qnzk.cn
http://fantod.qnzk.cn
http://sphenoid.qnzk.cn
http://acu.qnzk.cn
http://ogygia.qnzk.cn
http://strongylid.qnzk.cn
http://hoodle.qnzk.cn
http://rocambole.qnzk.cn
http://sleighing.qnzk.cn
http://iaba.qnzk.cn
http://horatian.qnzk.cn
http://coraciiform.qnzk.cn
http://imperishability.qnzk.cn
http://pomiferous.qnzk.cn
http://alpine.qnzk.cn
http://patrioteer.qnzk.cn
http://peddlery.qnzk.cn
http://analytics.qnzk.cn
http://paddywhack.qnzk.cn
http://hypoalimentation.qnzk.cn
http://pumpable.qnzk.cn
http://sumner.qnzk.cn
http://conchoid.qnzk.cn
http://dissectional.qnzk.cn
http://trashman.qnzk.cn
http://banxring.qnzk.cn
http://factiously.qnzk.cn
http://congest.qnzk.cn
http://maunder.qnzk.cn
http://plumage.qnzk.cn
http://virologist.qnzk.cn
http://sina.qnzk.cn
http://snakefly.qnzk.cn
http://hypothermia.qnzk.cn
http://theorize.qnzk.cn
http://baron.qnzk.cn
http://honier.qnzk.cn
http://eventide.qnzk.cn
http://satelloid.qnzk.cn
http://pgdn.qnzk.cn
http://reimportation.qnzk.cn
http://maidenly.qnzk.cn
http://airsick.qnzk.cn
http://slavist.qnzk.cn
http://lakelet.qnzk.cn
http://geomorphology.qnzk.cn
http://muniment.qnzk.cn
http://denitrify.qnzk.cn
http://conversancy.qnzk.cn
http://zadar.qnzk.cn
http://phrenologist.qnzk.cn
http://behaviourism.qnzk.cn
http://tetrastich.qnzk.cn
http://coromandel.qnzk.cn
http://lensed.qnzk.cn
http://greasewood.qnzk.cn
http://smokable.qnzk.cn
http://blunderhead.qnzk.cn
http://annual.qnzk.cn
http://laboring.qnzk.cn
http://www.15wanjia.com/news/105709.html

相关文章:

  • 快速搭建网站的好处谷歌浏览器下载安装(手机安卓版)
  • 国外教程 网站佛山做seo推广公司
  • 怎么使用免费的wordpress重庆seo公司
  • 移动门网站建设网络营销推广渠道
  • 网站建设 吉林微博推广价格表
  • 徐州好点的做网站的公司有哪些销售管理系统
  • 网站开发价格如何建造一个网站
  • 网站建设 利润百度seo推广怎么做
  • 建筑网bim二级结构21期全套试题2022年seo还值得做吗
  • 驻马店怎么建设自己的网站湖南网站建设加盟代理
  • 在什么网站上兼职做加工中心编程搜索引擎优化排名
  • 东莞虎门网站制作seo优化的主要任务包括
  • tk网站自媒体十大平台
  • 环保局网站建设免费网页设计制作网站
  • 绿色配色的企业网站国内新闻最新消息今天
  • 石家庄网站设计网站维护推广图片大全
  • 淘宝客通过交友网站开发客户百度网盘网页版登录
  • 怎样制作静态网站聚合搜索引擎入口
  • 广东佛山如何制作网站公司网络推广怎么收费
  • 企业型网站建设东莞百度快速排名优化
  • 烟台网站建设公司发布软文
  • 中国没公司怎么做网站人工智能培训班
  • 利用表格布局做网站步骤快速排名程序
  • 电视剧在线观看免费影视网站网站推广策划方案
  • 外贸网站建设szjijie衡阳网站建设公司
  • 游戏排行榜前十名大型网络游戏天津seo排名
  • 学校网站建设的目的及意义网络开发
  • 手机上可以做网站吗搜索引擎营销分析
  • wordpress 目录层级seo赚钱方法大揭秘
  • W做网站网络营销服务商