定义一个栈的数据结构,要求实现一个min函数,每次能够得到栈的最小值,并且要求Min的时间复杂度为O(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);
#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所示:
aaarticlea/png;base64,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" alt="" />
图1 运行效果
定义一个栈的数据结构,要求实现一个min函数,每次能够得到栈的最小值,并且要求Min的时间复杂度为O(1)的更多相关文章
- 包含MIN函数的栈+一个数组实现两个堆栈+两个数组实现MIN栈
1.题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 思路:利用一个辅助栈来存放最小值 栈 3,4,2,5,1 辅助栈 3,2,1 每入栈一次,就与辅 ...
- 剑指Offer面试题:19.包含Min函数的栈
一.题目:包含Min函数的栈 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min.push及pop的时间复杂度都是O(1). 这里我们要实现的就是min ...
- MS - 2 - 设计包含 min 函数的栈
定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素. 要求函数 min.push 以及 pop 的时间复杂度都是 O(1). template<typename T> st ...
- 【编程题目】设计包含 min 函数的栈
2.设计包含 min 函数的栈(栈)定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素.要求函数 min.push 以及 pop 的时间复杂度都是 O(1). 我的思路: 用一个额外的 ...
- 剑指Offer:面试题21——包含min函数的栈(java实现)
问题描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min,push及pop的时间复杂度都是O(1). 思路:加入一个辅助栈用来存储最小值集合 (这里要注 ...
- 2.设计包含 min 函数的栈[StackWithMinValue]
[题目]: 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素.要求函数min.push以及pop的时间复杂度都是O(1). [解法一]: 使用一个辅助栈来保存最小元素,其栈顶元素为当前栈 ...
- 【算法题目】包含min函数的栈
题目来源:<剑指offer>面试题21 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min,push以及pop的时间复杂度都是O(1). 分 ...
- (剑指Offer)面试题21:包含min函数的栈
题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 在该栈中,调用min,push,pop的时间复杂度都是O(1) 思路: 1.除了原来的栈s,增加一个辅助栈s_min,用 ...
- 设计包含min函数的栈
stack<pair<int, int>> sta; void push(int x) { int min_i; if(sta.empty()) { min_i = x; } ...
- 剑指offer-面试题21.包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数. 在该栈中,调用min,push及pop的时间复杂度都是O(1). 这一题实际上需要一个辅助栈存储最小值: 1.在模板类定 ...
随机推荐
- Android中的双向链表
1.看源代码必须搞懂Android的数据结构.在init源代码中双向链表listnode使用非常多,它仅仅有prev和next两个指针,没有不论什么数据成员.这个和linux内核的list_head如 ...
- linux和windows同步数据 cwrsync client to rsync server
linux和windows同步数据,rsync server cwrsync client linux server一般系统都自带rsync,如果没有就挂载系统盘自己安装一下,安装挺简单的不用我再多 ...
- [Javascript] Object.assign()
Best Pratices for Object.assign: http://www.cnblogs.com/Answer1215/p/5096746.html Object.assign() ca ...
- linux的文本管道连接处理技巧
举例1: strace -f -e open cpp Hello.cpp -o /dev/null 2>&1 | grep -v ENOENT | awk '{print $3}' 1) ...
- Camera类
Camera类 使用 Camera 类可从连接到运行 Flash Player 的计算机的摄像头中 捕获视频. 使用 Video 类可在本地监视视频. 使用 NetConnection 和 NetS ...
- 在CSS文件中引入其他CSS文件
引入CSS的方法有两种,一种是@import,一种是link 一.@import url('地址');二.<link href="地址" rel="styleshe ...
- 谷歌插件postman如果不能用,就用git命令发送post请求
curl -X POST --data '{"name":"zfpx"}' -H 'Content-Type:application/json' http:/ ...
- [JS] 如何清空file input框 [整理]
测试环境:OS --> winXPBrowsers --> IE6+, FF 3.0.11, FF 3.5, Opera 9.64, Opera 10 beta 2, Safari 4, ...
- SQL DMO のDMV
这两天对公司的一个项目进行优化,看着长长的SQL,脑袋不经有些大,一时间竟然不知道如何下手,一顿手忙脚乱后,小有成效,响应速度快了不少,同样的条件下可以做到秒级响应.闲暇时间想了想,还是得做点功课,最 ...
- oc总结
OC10天大纲 一.类和对象 1.什么是类? 同一种对象的抽象就是类. 2.什么是对象? 世界上的任何事物都可以称为对象,每个对象都有他自己的属性和行为. 3.如何创建一个类(请把一个.h和一个.m粘 ...