具体实现代码如下:
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
- #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;
- }
- #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 运行效果