定义一个栈的数据结构,要求实现一个min函数,每次能够得到栈的最小值,并且要求Min的时间复杂度为O(1)

来源:互联网 发布:java encode 转码 编辑:程序博客网 时间:2024/04/29 09:28

    具体实现代码如下:

stack.h内容如下:

#ifndef _STACK_H_#define _STACK_H_#define NUM 256typedef 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 运行效果



0 0
原创粉丝点击