Microsoft100——02.min函数的栈

这题是之前无聊的时候写的,先贴出来吧。在此之前还是得感谢CSDN上无私的大神们,关于微软100题,最全面的资料莫过于JULY大神的博客,有兴趣的读者可以见

http://blog.csdn.net/v_july_v/article/details/6870251


设计包含min函数的栈

定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。

要求函数min、push以及pop的时间复杂度都是O(1)


这一题其实很简单,其关键处在于min函数的时间复杂度要求,其实只要在数据元素中增加一个当前最小值的变量,每次push的时候都更新一下最小值即可。

见代码:

#include <iostream>

using namespace std;

struct MinStackElement
{
	int data;
	int min;
};

struct MinStack
{
	MinStackElement *data;
	int size;
	int top;
};

MinStack MinStackInit(int maxSize)
{
	MinStack stack;
	stack.size = maxSize;
	stack.data = (MinStackElement *)malloc(sizeof(MinStackElement)*maxSize);
	stack.top = 0;
	return stack;
}

void MinStackFree(MinStack stack)
{
	free(stack.data);
}

void MinStackPush(MinStack &stack,int d)
{
	if(stack.top == stack.size)
		cout<<"out of stack space.";
	MinStackElement* p = &stack.data[stack.top];
	p->data = d;
	p->min = (stack.top==0?d:stack.data[stack.top-1].min);
	if(p->min>d)
		p->min = d;
	cout<<"stackpush "<<stack.top<<endl;
	stack.top++;
	//cout<<stack.top<<endl;
	//cout<<stack.data[stack.top-1].min<<endl;
}

int MinStackPop(MinStack stack)
{
	if(stack.top == 0)
		cout<<"stack is empty!";
	return stack.data[--stack.top].data;
}

int MinStackMin(MinStack stack)
{
	if(stack.top == 0)
		cout<<"stack is empty!";
	return stack.data[stack.top-1].min;
}

void main()
{
	MinStack minStack;
	minStack = MinStackInit(30);
	for (int i=9 ; i>=1 ; --i)
	{
		MinStackPush(minStack,i);
		//minStack.top++;
		cout<<MinStackMin(minStack)<<endl;
	}
	for (int i=20 ; i>=10 ; --i)
	{
		MinStackPush(minStack,i);
		//minStack.top++;
		cout<<MinStackMin(minStack)<<endl;
	}
	MinStackFree(minStack);
	system("pause");
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值