您的位置:首页 > 理论基础 > 数据结构算法

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

2014-09-14 15:03 603 查看
具体实现代码如下:

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 运行效果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐