题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。
#include <stdio.h>
#include <stdlib.h>
#define N 10
typedef struct
{
int stack[N];
int auStack[N];
int top1, top2;
}Stack;
void push(Stack *, int);
void pop(Stack *);
int min_num(Stack *);
int main()
{
Stack s;
Stack *p = &s;
s.top1 = 0;
s.top2 = 0;
push(p,4);
push(p,5);
push(p,6);
push(p,3);
push(p,1);
push(p,1);
// pop(p);
// pop(p);
// pop(p);
printf("%d\n", min_num(p));
system("pause");
return 0;
}
void push(Stack *s, int a)
{
if (s->top1 == N)
{
printf("stack is full!\n");
return;
}
s->stack[s->top1++] = a;
if (s->top2 == 0)
{
s->auStack[s->top2++] = a;
}
else
{
if (a <= s->auStack[s->top2 - 1])
{
s->auStack[s->top2++] = a;
}
}
}
void pop(Stack *s)
{
if (s->top1 == 0)
{
printf("stack is empty!\n");
return;
}
if (s->stack[--s->top1] == s->auStack[s->top2 - 1])
{
--s->top2;
}
}
int min_num(Stack *s)
{
return s->auStack[s->top2 - 1];
}