c++ - 在使用链表实现队列时,为什么插入复杂度为 O(1)?
问题描述
我读了我的书,其中写到使用链接列表从队列中插入和删除都具有 O(1) 复杂性,但我的理解是删除它将是 O(1),但对于插入它是 O(n),因为它'将遍历直到结束指针。
解决方案
当使用链表实现队列时,链表是保存数据的内部数据结构,因为队列是 FIFO(先进先出),唯一的要求是元素需要从头部移除顺序和元素只需要添加到尾部。单链表是一个足够的容器,因为它维护了一个从头到尾通过元素的单向指针路径。包装队列的唯一要求是保存对头部的引用和对尾部的引用。
当一个元素被弹出/删除时,队列使用头指针在 O(1) 时间内删除第一个元素,并使用对下一个元素的链接引用作为新的头指针。当一个元素被推入/添加时,它用一个指向新元素的指针标记尾部元素,以保持一个完整的“队列”,并且还持有对添加元素的引用,以便它可以添加下一个元素 O (1次。
推荐阅读
- ios - WatchKit App 不包含任何 WatchKit 扩展
- node.js - mongoose - 为特定虚拟启用 `toJSON`
- regex - 可能以 0 开头的 4 位正则表达式
- javascript - 使用 react-js-pagination 进行分页,但引导样式未应用
- android - xamarin 形式的广播接收器以检测来电
- java - springboot中如何跳过失败的bean来避免reportFailure:771>>应用程序启动失败
- javascript - 无法调用在同一父函数 (DOM) 中声明的函数
- python - 无法在我的 Windows 10 上安装“Turicreate”
- html - 无法在 svg 中应用线条绘制和填充动画
- scala - Spark - 将列值传递给 udf,然后在 udf 中获取另一个列值