定义一个栈的数据结构,要求实现一个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.在模板类定 ...
随机推荐
- intent和intentfilter
intent 和intent Filters startActivity()的机制 用到了IBinder ipc 用到了进程间通讯机制 activity有四种LaunchMode 当startActi ...
- LVS图解 ---阿里
LVS在大规模网络环境中的应用 1. SLB总体架构 LVS本身是开源的,我们对它进行了多方面的改进,并且也已开源-https://github.com/alibaba/LVS. 接下 ...
- 第一篇:数据工程师眼中的智能电网(Smart Grid)
前言 想必第一次接触到智能电网这个概念的人,尤其是互联网从业者,都会顾名思义的将之理解为"智能的电网". 然而智能电网中的"智能"是广义上的智能,它就是指更好的 ...
- IOS内存等信息
1. 获取IOS APP占用的内存 #import <mach/mach.h> // ... void report_memory(void) { struct task_basic_in ...
- Android 获取系统或SDCARD剩余空间信息(转)
android.os下的StatFs类主要用来获取文件系统的状态,能够获取sd卡的大小和剩余空间,获取系统内部空间也就是/system的大小和剩余空间等等. 看下读取sd卡的:Java代码 ...
- TwoSAT算法模板
该模板来自大白书 [解释] 给多个语句,每个语句为“ Xi为真(假) 或者 Xj为真(假)” 每个变量和拆成两个点 2*i为假, 2*i+1为真 “Xi为真 或 Xj为真” 等价于 “Xi为假 –& ...
- oracle 自治事物 -- autonomous transaction
一 使用规则 : 在begin 之前申明 : PRAGMA AUTONOMOUS_TRANSACTION; 二 使用理解:autonomous transaction 是一个独立的事务,这一点是理解 ...
- Gradle命令详解与导入第三方包
Android Studio + Gradle的组合用起来非常方便,很多第三方开源项目也早都迁移到了Studio,为此今天就来介绍下查看.编译并导入第三方开源项目的方法. Sublime + Term ...
- 关于myeclipse中导入的项目修改项目名使得发布到tomcat访问路径正确
我新的项目基于旧的的项目,在Myeclipse8.6里我复制了一个,但是在部署到tomcat7.0时部署过去的文件夹名还是原来的旧项目名,不是新的,但里面内容为新项目,是不是什么地方没有改.求救各位高 ...
- javascript判断值是否undefined
function isUndefined(variable) { return typeof variable == 'undefined' ? true : false; }