思路:每次入栈前先找到最小的元素(每次有新元素入栈时就将新的元素假设为最小的元素min)(情况1:入栈时,栈内没有任何元素,即是一个空栈。这时候先将要入栈的元素入栈,再紧接着将最小的元素入栈;*情况2*:入栈时栈内已经有元素了,这时候将最小值min与栈顶元素相比较,如果栈顶元素比最小值还要小,则将其赋值给最小值min(min永远是最小的值)。然后先将要入栈的元素入栈再紧接着将最小值入栈。)如此一来,总是最小值最后入栈,那么取栈顶元素时,栈顶元素永远是最小的那一个。
minStack.h文件
#pragma once
typedef char minStackType;
typedef struct minStack
{
minStackType *data;
//有效元素个数
int size;
//表示data段内存中能容纳的元素个数
int capacity;
}minStack;
//初始化函数
void minStackInit(minStack *stack);
//销毁函数
void minStackDestroy(minStack *stack);
//入栈函数
void minStackPush(minStack *stack,minStackType value);
//出栈函数
void minStackPop(minStack *stack);
//取栈顶元素函数
int minStackGetTop(minStack *stack,minStackType *value);
minStack.c文件
#include<stdio.h>
#include"minSeqStack.h"
#include<stdlib.h>
#define Test_Header printf("\n==========%s==========\n",__FUNCTION__);
//初始化函数
void minStackInit(minStack *stack)
{
if(stack == NULL)
{
//非法输入