3.2 請設計乙個棧,除pop與push方法,還支援min方法,可返回棧元素中的最小值。push、pop和min三個方法的時間複雜度必須為o(1)。
我們假設除了用乙個棧s1來儲存資料,還用另乙個棧s2來儲存這些非冗餘最小值。那麼, 當我們將資料壓到要s1時,同時將它和s2的棧頂元素比較,如果不大於s2的棧頂元素, 那麼將當前值也壓入s2中。這樣一來,s2中儲存的就是乙個階段性最小值。 即s2中的每個值都是s1中棧底到達某個位置的最小值。那麼,如果執行pop操作呢? 執行pop操作除了將s1中的棧頂元素出棧,還要將它和s2中的棧頂元素比較,如果相等, 說明這個值是棧底到棧頂的最小值,而它出棧後,最小值就不再是它了。所以, s2也要將棧頂元素出棧,新的棧頂元素將對應s1剩下元素中新的最小值。
c++實現**:
#include#includeusing
namespace
std;
class
minstack
if(stack1.top()stack2.push(x);
else
}void
pop()
else
stack2.pop();
}inttop()
intgetmin()
};int
main()
棧與佇列 建立棧 佇列
陣列棧 完成stack createstack int maxelements 函式,該函式建立乙個棧,maxelements為與分配的棧空間大小 棧可用空間為array 0,maxelements 1 typedef int elemtype struct stackrecord typedef ...
棧 佇列與優先佇列
123 45 include stack int s 入棧 push 出棧 pop 取棧頂top 123 45 include queue int s 入隊 push 出隊 pop 取隊首元素 front 不刪除 123 4priority queue int pq 入隊 push 出隊 pop 取...
棧 佇列與優先佇列
123 45 include stack int s 入棧 push 出棧 pop 取棧頂top 123 45 include queue int s 入隊 push 出隊 pop 取隊首元素 front 不刪除 123 4priority queue int pq 入隊 push 出隊 pop 取...