繁体   English   中英

如果用链表实现堆栈,堆栈的大小函数的时间复杂度如何?

[英]How Is the time complexity of size function of stack constant if stack is implemented by linked list?

在任何时候,如果我们调用 size 函数,这意味着计算我们需要遍历整个链表的大小,即 O(n)。 我想了解标准模板库 c++ 大小函数.. 获得 O(1) 的唯一方法是跟踪推送和弹出操作? 它是如何在 C++ 标准库中完成的?

您不一定需要遍历列表来了解其大小。 只要您将 size 作为类的成员变量,并在列表的size()发生变化时正确地递增/递减它,返回size()就是一个 O(1) 操作。 size()成员函数可以简单地实现为size_t size() const noexcept { return m_size; } size_t size() const noexcept { return m_size; }或类似的。

根据容器要求(C++ 17, 26.2.1 一般容器要求),如果容器具有成员函数大小,则其复杂度是恒定的。 标准容器std::list具有成员函数大小。

标准容器适配器std::stack的成员函数定义如下

size_type size() const { return c.size(); }

其中c是带下划线的容器,例如std::list 所以它也有恒定的复杂性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM