linked-list相关内容

为什么 LinkedList 通常比 List 慢?

我开始在我的一些 C# 算法中使用一些 LinkedList 而不是 List,希望能加快它们的速度.但是,我注意到他们只是感觉变慢了.像任何优秀的开发人员一样,我认为我应该尽职调查并验证我的感受.所以我决定对一些简单的循环进行基准测试. 我认为用一些随机整数填充集合就足够了.我在调试模式下运行此代码以避免任何编译器优化.这是我使用的代码: var rand = new Random(En ..
发布时间:2022-01-01 18:38:21 C#/.NET

为什么 Haskell 的默认字符串实现是一个字符链表?

众所周知,Haskell 的默认 String 实现在速度和内存方面都不是很有效.据我所知,[] 列表 通常在 Haskell 中实现为单链表,对于大多数小/简单数据类型(例如 Int),它没有看起来是个好主意,但对于 String 来说,这似乎完全是矫枉过正.关于此事的一些意见包括: 真实世界 Haskell 在这样的简单基准测试中,即使是用 Python 等解释型语言编写的程序也能 ..
发布时间:2022-01-01 18:38:05 其他开发

为什么链表删除和插入操作的复杂度为 O(1) ?不应该是 O(n)

据说LinkedList的remove和add操作的复杂度是O(1).在 ArrayList 的情况下,它是 O(n). 大小为“M"的ArrayList的计算:如果我想删除第N个位置的元素,那么我可以使用一次索引直接转到第N个位置(我不必遍历到第N个索引)然后我可以删除元素,直到此时复杂度为 O(1),然后我将不得不移动其余的元素(MN 移动),因此我的复杂度将是线性的,即 O(M-N+1 ..

为什么链表的归并排序空间复杂度为 O(log(n))?

数组上的归并排序的空间复杂度为 O(n),而链表上的归并排序的空间复杂度为 O(log(n)),记录在 这里 我相信我对数组的情况有所了解,因为我们在合并两个子数组时需要辅助存储.但是链表合并排序不会只是将两个子链表合并到位吗?我认为这对于创建一个新头的空间复杂度为 O(1). 就地合并(无辅助存储): 公共节点合并(节点a,节点b){节点 dummyHead, curr;dummy ..
发布时间:2022-01-01 18:37:45 其他开发

链表删除的时间复杂度

根据本网站,我在理解为什么链接列表的时间复杂度为 O(1) 时遇到了一些麻烦.据我所知,如果你想删除一个元素,你必须遍历列表以找出元素所在的位置(如果它甚至存在)?据我所知,它不应该是 O(n) 还是我完全遗漏了什么? 解决方案 不,您没有遗漏任何东西. 如果要删除一个特定的元素,时间复杂度是O(n)(其中n是元素的个数)因为你必须找到这个元素首先. 如果要删除特定索引 i 处 ..
发布时间:2022-01-01 18:37:35 其他开发

vector 是链表的特例吗?

说到STL,有几个同学跟我说“向量就是链表". 我还有另外一个说法,如果你用迭代器调用 erase() 方法,它会破坏向量,因为它是一个链表. 他们也往往不明白为什么我总是认为向量是连续的,就像任何其他数组一样,并且似乎不明白随机访问的含义.vector 是像常规数组一样严格连续,还是最多连续?(例如,如果整个数组放不下,它将分配几个连续的段). 解决方案 很抱歉,你的同学完全 ..
发布时间:2022-01-01 18:37:26 C/C++开发

C++ 中的高效链表?

这个文档说std::list效率低下: std::list 是一个非常低效的类,很少有用.它为插入其中的每个元素执行堆分配,因此具有极高的常数因子,特别是对于小数据类型. 评论:这让我很惊讶.std::list 是一个双向链表,所以尽管其元素构造效率低下,但它支持 O(1) 时间复杂度的插入/删除,但在此引用的段落中完全忽略了该特性. 我的问题:假设我需要一个 sequentia ..

面试题:从未排序的链表中删除重复项

我正在阅读 破解编码面试,第四版:150 个编程面试问题和解决方案,我正在尝试解决以下问题: 2.1 编写代码从未排序的链表中删除重复项.跟随UP:如果遇到这个问题,你会怎么解决?不允许使用临时缓冲区? 我正在用 C# 解决它,所以我创建了自己的 Node 类: 公共类节点其中 T : 班级{公共节点下一个 { 得到;放;}公共 T 值 { 得到;放;}公共节点(T值){下一个 = ..
发布时间:2022-01-01 18:37:09 Java开发

用于快速随机访问、搜索、插入和删除的高效数据结构

我正在寻找一种数据结构(或多个结构),它可以让我保留一个有序的整数列表,没有重复,索引和值在同一范围内. 我需要四个主要操作来提高效率,按重要性大致排序: 从给定索引中获取值 找到给定值的索引 在给定索引处插入一个值 删除给定索引处的值 使用数组我在 O(1) 处有 1,但 2 是 O(N) 并且插入和删除很昂贵(我相信也是 O(N)). 链表有 O(1) 次插入和删 ..
发布时间:2022-01-01 18:36:59 其他开发

什么时候应该使用链表的真实世界示例?

另一位程序员提到,在他的职业生涯中,他们还没有找到在任何专业软件中使用链表数据结构的用例.我想不出任何好的例子.他主要是 C# 和 Java 开发人员 谁能举例说明这是解决特定现实世界问题的正确数据结构? 相关: 什么是链表的实际示例?> 解决方案 一个真实世界的例子是 FIFO 队列.一个简单的基于数组的列表对此非常不利,因为您需要在一端添加并在另一端删除,并且这些操作之一将是 ..
发布时间:2022-01-01 18:36:49 Java开发

为什么 std::list::reverse 具有 O(n) 复杂度?

为什么C++标准库中std::list类的reverse函数有线性运行时间?我认为对于双向链表,反向函数应该是 O(1). 反转双向链表应该只涉及交换头指针和尾指针. 解决方案 假设,reverse 可能是 O(1).(再次假设)可能有一个布尔列表成员,指示当前链接列表的方向与创建列表的原始方向相同还是相反. 不幸的是,这会降低基本上任何其他操作的性能(尽管不会改变渐近运行时) ..
发布时间:2022-01-01 18:36:43 C/C++开发

为什么我们需要一个“循环链表"?(单个或双重)数据结构?

为什么我们需要一个“循环链表"(单向或双向)数据结构? 它解决了哪些简单链表(单链表或双链表)显而易见的问题? 解决方案 使用它们的两个原因: 1) 一些问题域本质上是循环的. 例如,大富翁板上的方块可以用循环链表表示,以映射到它们的固有结构. 2) 一些解决方案可以映射到循环链表以提高效率. 例如,抖动缓冲区是一种缓冲区,它从网络中获取编号的数据包并将它们按 ..
发布时间:2022-01-01 18:36:36 其他开发

n log n 时间打乱链表的算法

我正在尝试使用分治算法对链表进行混洗,该算法在线性 (n log n) 时间和对数 (log n) 额外空间中随机混洗链表. 我知道我可以进行类似于可用于简单值数组的 Knuth shuffle,但我不确定如何使用分而治之.我的意思是,我实际上在分裂什么?我是否只是划分到列表中的每个单独节点,然后使用一些随机值将列表随机组合在一起? 还是我给每个节点一个随机数,然后根据随机数对节点进行 ..
发布时间:2022-01-01 18:36:27 其他开发

LinkedList 之间的区别和 LinkedList
LinkedList 和 LinkedList? 解决方案 这通过编译: LinkedListlist1 = 新的 LinkedList(); 这不会: LinkedListlist2 = 新的 LinkedList(); 即LinkedList 变量可以分配任何 LinkedList.LinkedList 变量只能分配一个 LinkedList(或原始的 LinkedList,不 ..
发布时间:2022-01-01 18:36:18 Java开发

在 Python 中重新排序链表

我意识到使用内置列表类型可以更好地完成这种数据结构,但出于学术原因,我试图更多地理解这一点.鉴于我有一个这样的链表: a -> b -> c -> d -> e -> f 我想将引用更改为 b -> a -> d -> c -> f -> e 换句话说,每一对都被交换.我正在使用这两个类来创建一个链表. 类节点:def __init__(self):self.cargo ..
发布时间:2022-01-01 18:36:07 Python

单链打印 C++

我正在尝试以 {1,2,3,4,etc} 格式选择我的链.您可以在下面找到包含节点布局的头文件.我只是对如何循环遍历我的列表以打印出 Item 感到困惑. 任何指导将不胜感激! set.h using namespace std;#include 类集{私人的:结构节点{整数项;//用户数据项节点 * 成功;//链接到节点的后继节点};无符号数;//集合中的当前项目数节点*头;//链 ..
发布时间:2022-01-01 18:35:54 C/C++开发

尝试在 C 中制作链表

我正在尝试在 C 中创建一个链表结构.我不太确定出了什么问题.我的错误是: linked.c:6:2: 错误:未知类型名称“linkedList"链接.c:在函数‘makeList’中:Linked.c:30:2: 错误:'first' 未声明(在此函数中首次使用)Linked.c:30:2: 注意:每个未声明的标识符对于它出现的每个函数只报告一次链接.c:在函数“addToList"中:Lin ..
发布时间:2022-01-01 18:35:41 其他开发

正确实现单链表 C++

我有一份雇主名单,例如: 节点 1:吉尔、马特、乔、鲍勃、马特 节点 2:杰夫、詹姆斯、约翰、乔纳森、约翰、爱德华 节点 3:Matt、Doe、Ron、Pablo、Ron、Chase、Ron、Chase、路易 并且我正在尝试将它放到哪里,如果它看到重复,它会将其发送到列表的前面并删除该当前节点,使其看起来像这样 节点 1:马特、吉尔、乔、鲍勃 节点 2:约翰、杰 ..
发布时间:2022-01-01 18:35:31 C/C++开发