![](/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.