定义一个栈的数据结构,要求实现一个min函数,每次能够得到栈的最小值,并且要求Min的时间复杂度为O(1)
2014-09-14 15:03
603 查看
具体实现代码如下:
stack.h内容如下:
图1 运行效果
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("栈元素:\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 运行效果
相关文章推荐
- 定义一个栈的数据结构,要求实现一个min函数,每次能够得到栈的最小值,并且要求Min的时间复杂度为O(1)
- 定义一个栈的数据结构,要求实现一个min函数,每次能够得到栈的最小值,并且要求Min的时间复杂度为O(1)
- 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)
- 面试题:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素,要求函数min,push及pop的时间复杂度都是O(1)
- 定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素。要求函数 min、push 以及 pop 的时间复杂度都是 O(1)。
- 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。
- 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。时间复杂度都是O(1)
- 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。o(1)空间的代码实现
- 2定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素
- 定义一个栈的数据结构,实现min函数,要求push,pop,min时间复杂度是0(1);找出字符串中的最长子串,要求子串不含重复字符,时间复杂度是O(n);
- 剑指offer-定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
- 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
- 剑指offer——定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
- 请设计包含min函数的栈,定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素
- 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素
- java实现定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数
- 定义一个栈的数据结构,实现min函数,要求push,pop,min时间复杂度是0(1);找出字符串中的最长子串,要求子串不含重复字符,时间复杂度是O(n);
- java 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
- 剑指offer:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数
- 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。