剣指offerの面接問題21 min関数を含むスタック
1706 ワード
問題の説明:
スタックのデータ構造を定義し、スタックの最小要素を得ることができるmin関数をこのタイプで実現してください.このスタックでは、min、pushおよびpopを呼び出す時間の複雑さはO(1)である.
実現コードは以下の通りです.
剣指オフ
備考:
転載は出典を明記してください.http://blog.csdn.net/wsyw126/article/details/51372294
作者:WSYW 126
スタックのデータ構造を定義し、スタックの最小要素を得ることができるmin関数をこのタイプで実現してください.このスタックでは、min、pushおよびpopを呼び出す時間の複雑さはO(1)である.
実現コードは以下の通りです.
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include<math.h>
struct StackIn{
int array[100];
int top;
};
typedef struct StackIn StackIn;
struct Stack{
StackIn *stack;
StackIn *min_stack;
};
typedef struct Stack Stack;
void initStackIn(StackIn *S){
S->top=0;
S->array[0]=100;
}
void pushIn(StackIn *S,int value){
S->array[(S->top)++]=value;
}
int popIn(StackIn *S){
return S->array[--(S->top)];
}
int getIn(StackIn *S){
int i =S->top-1;
return S->array[i];
}
void initStack(Stack *S){
S->stack=(StackIn *)malloc(sizeof(struct StackIn));
S->min_stack=(StackIn *)malloc(sizeof(StackIn));
initStackIn(S->stack);
initStackIn(S->min_stack);
}
void push(Stack *S,int value){
int min = getIn(S->min_stack);
if(value<min){
pushIn(S->min_stack,value);
}else{
pushIn(S->min_stack,min);
}
pushIn(S->stack,value);
}
int pop(Stack *S){
popIn(S->min_stack);
return popIn(S->stack);
}
int getMin(Stack *S){
return getIn(S->min_stack);
}
int main(int argc, char *argv[])
{
Stack *S=malloc(sizeof(Stack));
initStack(S);
push(S,1);
printf("min is :%d
",getMin(S));
push(S,3);
printf("min is :%d
",getMin(S));
push(S,0);
printf("min is :%d
",getMin(S));
pop(S);
printf("min is :%d
",getMin(S));
pop(S);
printf("min is :%d
",getMin(S));
return 0;
}
参考資料:剣指オフ
備考:
転載は出典を明記してください.http://blog.csdn.net/wsyw126/article/details/51372294
作者:WSYW 126