簡體   English   中英

使用動態數組實現堆棧

[英]Stack implemented with dynamic array

假設我們使用動態分配的數組實現堆棧。 如果陣列填滿,我們將面臨兩難選擇。 從以下選項中,選擇最能描述我們處理填充數組的策略的選項。

(a)我們聲明一個新的數組,是原始數據的兩倍,並在一系列n次推送中將數據復制到新空間中,總成本為O(n)。

(b)我們聲明另一個數組,並跟蹤堆棧類的私有成員中兩個(或更多)數組中的哪一個包含堆棧的當前頂部。 每次推動我們花費O(1)。

(c)對於某些固定的k,我們創建一個大小為n + 2 ^ k的新數組,並將數據復制到新空間中,每次推送操作的平均成本為O(1)。

(d)我們避免使用動態分配的數組實現堆棧,因為必須重新分配內存是低效的。

(e)這些答案都不是合理的答復。

我很確定正確的答案是,但我不明白為什么那會是最好的答案呢? 其他人是否實用? 他們似乎對我好。 例如, c與`a,no?幾乎相同? 為什么加倍有利然后增加一定數量呢? 其他選擇怎么樣 - 為什么他們不工作?

假設您的堆棧是128個元素,最后您必須在其中存儲4096個元素。 你需要多少倍才能在加倍時將數據調整為每次擴展128個項目?

這看起來像是家庭作業,也可能是帶回家的考試,所以我會故意留下一些答案。

a)嘗試為O(n)索賠提供證據。 與b)的證據比較。

b)如何存儲使用的子陣列? (它一直是烏龜。)

c)嘗試為O(1)斷言提供證據。 與您的a)證明相比較。

d)所有替代方案都有其低效率。 比較他們。 請注意,在實時編程中,您不能使用動態重新分配的數組,並且必須使用類似鏈接列表的內容。 為什么?

e)如果上述任何一項是合理的,這是微不足道的。 反之亦然。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM