![](/img/trans.png)
[英]What is worst case time complexity to get the FIRST element placed on a Stack (linked-list)?
[英]What is the time complexity of accessing an element in a Stack? Or is it even possible to do it?
我看过的其中一篇教程说,访问在链表或数组中实现的堆栈会花费O(1)的时间复杂度,但他也说“搜索”未排序的数据不适用。 现在我很困惑“搜索”与“访问”是否相同?
我看过的其中一篇教程说,访问以链表或数组形式实现的堆栈会花费O(1)的时间复杂度
本教程关于基于数组的堆栈是正确的。 假设堆栈API允许,您可以从O(1)中基于数组的堆栈的顶部元素中获得N或从底部元素中获得N。 这只是一个数组查找。
对于基于链表的堆栈,它更为复杂。 您可以在O(1)中获得顶部(或底部)元素。 但是从顶部元素获取第N个对象是O(N)操作。 您必须遵循N个引用才能获得所需的元素。
但他还说,“搜索”未排序的数据不适用。 现在我很困惑“搜索”与“访问”是否相同?
他们是不同的东西。 考虑一下:
String[] array = new String[] {"A", "B", "C"};
访问array
一个元素是array[i]
。 对于是O(1)运算的数组。 (对于链表,等效值为O(N)
)
搜索数组的元素是这样的:
for (String s : array) {
if (s.equals("Fred")) {
// found it!
}
}
当我使用这些词时,“访问”和“搜索”显然意味着不同的含义。
现在,正如欧文所说,“搜索”和“访问”等术语的含义将因作者而异。 但是“搜索”具有明显的含义,即需要寻找某物……而不是知道它在哪里。
目前尚不清楚您正在阅读的教程对“不搜索未排序的数据不适用”可能意味着什么。 当然可以搜索未排序的数据,但这将是一个O(N)操作...除非您事先做过一些整理数据的工作。 (请参见上面的示例代码。)
但是,然后再次针对访问栈顶的特殊情况通常优化栈数据结构。 不访问第N个元素,或搜索具有特定值的元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.