#include <stdio.h> #include <stdlib.h> //设计带有min函数的栈 struct stack { int element[100]; //栈的大小为100 int *bottom; int *top; }; //指针a指向辅助栈 void push(struct stack* s, struct stack* a, int x) { if (s->top - s->bottom == 100) { printf("stack is full !"); return; } if (s->bottom == s->top) *(a->top) = 0; else if (x < min(s, a)) *(a->top) = s->top - s->bottom; else *(a->top) = *(a->top - 1); (a->top)++; *(s->top) = x; (s->top)++; } void pop(struct stack* s, struct stack* a) { if (s->bottom == s->top) { printf("stack is empty !/n"); return; } *(s->top) = 0; s->top--; *(a->top) = 0; a->top--; } int min(struct stack* s, struct stack* a) { if (s->bottom == s->top) { printf("stack is empty !/n"); return 0; } int index = *(a->top - 1); return (s->element)[index]; } int main() { struct stack s, a; memset(s.element, 0, sizeof(s.element)); s.bottom = s.element; s.top = s.bottom; memset(a.element, 0, sizeof(a.element)); a.bottom = a.element; a.top = a.bottom; push(&s, &a, 3); printf("the min element is %d/n", min(&s, &a)); push(&s, &a, 2); printf("the min element is %d/n", min(&s, &a)); push(&s, &a, 1); printf("the min element is %d/n", min(&s, &a)); pop(&s, &a); printf("the min element is %d/n", min(&s, &a)); pop(&s, &a); printf("the min element is %d/n", min(&s, &a)); pop(&s, &a); printf("the min element is %d/n", min(&s, &a)); return 0; }这道题的思路是利用一个辅助栈,辅助栈内存储的是当前最小元素在数据栈中的位置。