棧和佇列面試題(一)

2021-08-19 07:33:30 字數 1330 閱讀 7868

一、實現乙個棧,要求push(入棧),pop(出棧),min(返回最小值的操作)的時間複雜度為o(1)。

思想:建立乙個棧,棧中儲存著入棧的值和當前棧中的最小值,每次入棧時都入棧兩個值,在入棧時先比較要插入的值與棧頂值得大小,通過打擂台的思想迴圈去比較,最終棧頂元素就是整個棧的最小值

注意:入棧最小值與當前值時,必須先入棧當前值在入棧最小值,這樣才能保證棧頂元素最小

例如:序列 9  5  2  7 入最小棧

**實現:

#include #include #include "seqstack.h"

typedef struct minstackminstack;

void minstackinit(minstack* min_stack)

seqstackinit(&min_stack->stack);

}void minstackpush(minstack* min_stack,seqstacktype value)

seqstacktype min = value;

seqstacktype top;

int ret = seqstacktop(&min_stack->stack,&top);

if(ret == 0)else

//先插入value,再插入min,才能保證棧頂為最小值

seqstackpush(&min_stack->stack,value);

seqstackpush(&min_stack->stack,min);

return;

}void minstackpop(minstack* min_stack)

seqstackpop(&min_stack->stack);

seqstackpop(&min_stack->stack);

}int minstacktop(minstack* min_stack,seqstacktype* value)

return seqstacktop(&min_stack->stack,value);

}

test.c

#include #define test_header printf("\n***********************************=%s***********************************\n",__function__)

void testminstack()

int main()

棧和佇列面試題

遞迴反轉乙個棧 void reverse stack s reverse s int tmp2 s.top s.pop reverse s s.push tmp1 reverse s s.push tmp2 遞迴排序乙個棧 void sort stack s sort s int tmp2 s.to...

棧和佇列面試題

1.使用兩個棧,實現乙個佇列。棧 先進後出,且只能從棧頂pop出資料。佇列 先進先出,對頭pop資料,隊尾push資料。如下 include template class myqueue void pop else if stack2.empty private stack stack1 stack...

棧和佇列面試題

採用順序棧實現棧基本操作 採用鏈式佇列實現佇列基本操作 define maxsize100 typedef int sdatatype typedef struct stack stack typedef struct minstack minstack void stackinit stack s...