實現GetMin功能的棧

2021-07-24 17:51:37 字數 1264 閱讀 1288

【題目】

實現乙個特殊的棧,在實現棧的基本功能的基礎上,再實現返回棧中最小元素的棧。

【要求】

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 空間...