【題目】
實現乙個特殊的棧,在實現棧的基本功能的基礎上,再實現返回棧中最小元素的棧。
【要求】
1、pop、push、getmin操作的時間複雜度都為o(1)
2、設計的站型別可以使用現成的棧結構
棧的一些基本定義模板:
//標頭檔案
#include //模板《型別名》
template struct specstack
//push函式 無返回值,用void定義,且有引數。
void push(t param)
//pop函式。要先判空?非空才能進行pop
void pop()
//top函式。 要先判空?非空才能進行top
t top()
//size函式。有返回值,必須用int型。
int size() };
int main()
下面提供兩種思路:
s棧:用來儲存當前棧中的元素。具有正常棧的功能。
min棧 :用於儲存每一步的最小值。
思路一:
壓入資料規則:
(1)將當前資料壓入s棧。
(2)然後判斷min棧是否為空,若為空,也壓入min棧。
(3)若不為空;
·判斷當前資料即s棧頂元素的值與min棧頂元素得治的大小;
如果s.top()<=min.top():則把當前資料(即s.top())也壓入min棧
如果s.top()>min.top():則把min棧頂元素重複壓入min棧(即min.push(min.top())
彈出規則:
(1)s棧彈出棧頂元素
(2)min棧彈出棧頂元素
具體實現**:
#include #include using std::stack;
using std::cout;
using std::endl;
template struct specstack
void push(t param)
void pop()
} int size()
t getmin()
t top()
void push(t param)
void pop()
{ if(empty())
cout<<"error:棧為空"s.push(3);
s.push(4);
cout<
題目來自於《程式設計師**面試指南》。
設計getMin功能的棧
題目描述 實現乙個特殊功能的棧,在實現棧的基本功能的基礎上,再實現返回棧中最小元素的操作。輸入描述 第一行輸入乙個整數n,表示對棧進行的操作總數。下面n行每行輸入乙個字串s,表示操作的種類。如果s為 push 則後面還有乙個整數x表示向棧裡壓入整數x。如果s為 pop 則表示彈出棧頂操作。如果s為 ...
實現乙個具有GetMin功能的棧
實現乙個棧,要求實現push 出棧 pop 入棧 min 返回最小值的操作 的時間複雜度為o 1 1 建立兩個棧,乙個為普通的容納資料的棧stackdata,乙個為stackmin的棧用來返回最小值 2 壓入資料時,stackdata直接壓入資料newnum stackmin若為空,直接壓入資料ne...
棧與佇列1 設計getMin功能的棧
設計棧,實現基本功能的前提下,實現返回棧內最小元素的功能 1.push,pop,getmin 複雜度為o 1 2.允許使用現成棧結構 使用兩個棧,stackdata和stackmin,stackmin負責存最小值 共同點 都用stackmin儲存stackdata的最小值,時間複雜度均為o 1 空間...