2.設計包含 min 函式的棧(棧)
定義棧的資料結構,要求新增乙個 min 函式,能夠得到棧的最小元素。
要求函式 min、push 以及 pop 的時間複雜度都是 o(1)。
我的思路:
用乙個額外的元素記錄最小值,push時若遇到更小的則更新。但是pop的時候遇到了問題,最小的彈出去了怎麼得到下乙個最小的值? 總覺得要排序,再存乙個min的鏈。結果沒達到o(1).
/*2.設計包含 min 函式的棧(棧)
定義棧的資料結構,要求新增乙個 min 函式,能夠得到棧的最小元素。
要求函式 min、push 以及 pop 的時間複雜度都是 o(1)。
*/#include
#include
typedef
intelemtype;
typedef
struct
stack_elem
;typedef
struct
my_stack
my_stack;
elemtype stack_min(my_stack s)
void stack_push(my_stack*s, elemtype e)
elemtype stack_pop(my_stack*s)
stack_elem * pop_elem = s->top;
s->top = pop_elem->p_next;
pop_elem->p_next =null;
elemtype e = pop_elem->data;
if(e == s->min)
p = p->p_next;
}s->min =min;
}free(pop_elem);
returne;}
intmain()
網上找答案,突然恍然大悟,存乙個最小值的棧就好了,每次遇到新的最小值就進棧,不是新最小值就不理會。這樣是沒問題的,如
棧中元素:3 4 2 5 6 1
min棧中的元素:3 2 1
彈出1後
棧中元素:3 4 2 5 6
min棧中的元素:3 2
彈5 6時不會影響 最小值。
網上**:
//minstatck.cpp : 定義控制台應用程式的入口點。
#include "
stdafx.h
"#include
#include
#include
using
namespace
std;
template
class
stacksuppliedmin
void
pop()
t min()
void
display()
};void
main()
演算法題目 包含min函式的棧
定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。在該棧中,呼叫min,push及pop的時間複雜度都是o 1 解題關鍵是,新增乙個輔助棧 include include include include using namespace std templateclass stac...
設計包含min函式的棧
本文 題目 定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素。要求函式min push以及pop的時間複雜度都是o 1 分析 這是去年google的一道面試題。我看到這道題目時,第一反應就是每次push乙個新元素時,將棧裡所有逆序元素排序。這樣棧頂元素將是最小元素。但由於不能保證最後p...
設計包含min函式的棧
定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素,要求函式min,push及pop的時間複雜度都是o 1 棧的資料結構包含兩個普通棧,乙個棧存資料,另乙個棧存最小值 或最小值的位置,如果用stl裡的棧,則不能存最小值的位置,因為stl裡的stack不支援下標索引訪問 cpp view ...