`
u010815305
  • 浏览: 30539 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

包含min函数的栈

 
阅读更多
题目描述:

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

输入:

输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为一个整数n(1<=n<=1000000), n代表将要输入的操作的步骤数。
接下来有n行,每行开始有一个字母Ci。
Ci=’s’时,接下有一个数字k,代表将k压入栈。
Ci=’o’时,弹出栈顶元素。

输出:

对应每个测试案例中的每个操作,
若栈不为空,输出相应的栈中最小元素。否则,输出NULL。

样例输入:
7
s 3
s 4
s 2
s 1
o
o
s 0
样例输出:
3
3
2
1
2
3
0

#include<stdio.h>
#include<stdlib.h>
#define MAX 1000

int top=-1;
/*在栈顶索引指针为top时,向栈A中压入数据data*/
bool push(int *A,int data)
{
	if(top>=MAX-1||top<-1)
		return false;
		
	A[++top]=data;
	return true;
} 
/* 
在栈顶索引指针为top时,出栈 
*/ 
bool pop()
{
	if(top<0)
		return false;
	top--;
	return true;
}
//Min栈作为辅助栈,栈顶存储栈中最小的元素 
void minAll(int* A,int*Min)
{
	if(top>MAX-1)
		return;
	Min[0]=A[0];
	for(int i=1;i<=top;i++)
	{
		if(Min[i-1]>A[i])
			Min[i]=A[i];
		else
			Min[i]=Min[i-1];
	}
}
/*返回栈顶为top 时栈中的元素的最小值*/
int min(int *Min)
{
	return Min[top];
} 
int main()
{
	int num;
	int A[MAX];
	int Min[MAX];
	
	while(scanf("%d",&num)!=EOF) 
	{
		for(int i=0;i<num;i++)
		{
			char ci;
			while(getchar()!='\n')
				continue;
			scanf("%c",&ci);
			
			if(ci=='s')
			{
				int k;
				scanf("%d",&k);
				push(A,k);
			}
			
			if(ci=='o')
				pop(); 
		
			minAll(A,Min);
			if(top<0)
				printf("NULL\n");
			else
				printf("%d\n",min(Min));
		}	
	}
	
	return 0;
}


结果:

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics