程式設計題目 設計包含 min 函式的棧

2022-05-18 11:00:51 字數 1480 閱讀 8704

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