具体实现代码如下:
stack.h内容如下:
#ifndef _STACK_H_
#define _STACK_H_
#define NUM 256
typedef struct _tagStack
{
int m_Array[NUM];
int m_nTop;
}Stack;
void InitStack(Stack * pStack);
int Push(Stack * pStack, int nNum);
int Pop(Stack * pStack);
int IsEmtpy(Stack * pStack);
int Top(Stack * pStack);
void PrintStack(Stack * pStack);
int GetMin(Stack * pStack);
#endif
stack.cpp的内容如下:#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "stack.h"
Stack TempStack = { 0 };
int nMinIndex = -1;
void InitStack(Stack * pStack)
{
if (!pStack)
return;
memset(pStack->m_Array, 0, NUM);
pStack->m_nTop = -1;
memset(TempStack.m_Array, 0, NUM);
TempStack.m_nTop = -1;
return;
}
int Push(Stack * pStack, int nNum)
{
if (!pStack)
return 0;
if (pStack->m_nTop + 1 >= NUM)
return 0;
if (nMinIndex == -1)
{
nMinIndex = 0;
TempStack.m_nTop++;
TempStack.m_Array[TempStack.m_nTop] = nMinIndex;
}
else
{
if (nNum < pStack->m_Array[nMinIndex])
{
nMinIndex = pStack->m_nTop + 1;
}
TempStack.m_nTop++;
TempStack.m_Array[TempStack.m_nTop] = nMinIndex;
}
pStack->m_nTop++;
pStack->m_Array[pStack->m_nTop] = nNum;
return 1;
}
int Pop(Stack * pStack)
{
int nRet = 0;
if (!pStack)
return 0;
if (pStack->m_nTop < 0)
return 0;
nRet = pStack->m_Array[pStack->m_nTop--];
TempStack.m_nTop--;
return 1;
}
int IsEmtpy(Stack * pStack)
{
if (!pStack)
return -1;
if (pStack->m_nTop == -1)
return 1;
return 0;
}
int Top(Stack * pStack)
{
if (!pStack)
return 0;
if (pStack->m_nTop < 0)
return 0;
return pStack->m_Array[pStack->m_nTop];
}
void PrintStack(Stack * pStack)
{
int i = 0;
if (!pStack)
return;
printf("栈元素:\n");
for (i = 0; i <= pStack->m_nTop; i++)
{
printf("%d ", pStack->m_Array[i]);
}
printf("\n");
return;
}
int GetMin(Stack * pStack)
{
if (!pStack)
return 0;
if (TempStack.m_nTop >= 0)
{
if (pStack->m_nTop == TempStack.m_nTop)
{
return pStack->m_Array[TempStack.m_Array[TempStack.m_nTop]];
}
}
return -1;
}
main.cpp的内容如下:#include <stdlib.h>
#include <stdio.h>
#include "stack.h"
void main()
{
Stack MyStack;
InitStack(&MyStack);
Push(&MyStack, 3);
Push(&MyStack, 4);
Push(&MyStack, 5);
Push(&MyStack, 2);
Push(&MyStack, 1);
PrintStack(&MyStack);
printf("最小值:\n");
while (IsEmtpy(&MyStack) != 1)
{
printf("%d\n", GetMin(&MyStack));
Pop(&MyStack);
}
system("pause");
return;
}
运行效果如图1所示:图1 运行效果