具体实现代码如下:
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); #endifstack.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("栈元素: "); for (i = 0; i <= pStack->m_nTop; i++) { printf("%d ", pStack->m_Array[i]); } printf(" "); 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("最小值: "); while (IsEmtpy(&MyStack) != 1) { printf("%d ", GetMin(&MyStack)); Pop(&MyStack); } system("pause"); return; }运行效果如图1所示:
图1 运行效果