版权声明:本文为博主原创文章,未经博主允许不得转载。可联系邮箱[email protected] https://blog.csdn.net/Justin_bibo/article/details/79752833
问题描述
问题
定义一个单调栈:每次整数n入栈时,如果栈顶元素大于n,则栈顶元素出 栈,并且继续判断栈顶元素是否大于n,大于则出栈,重复操作,直到栈顶 元素不大于n,n入栈。入栈完毕。例如:栈中元素为2 3 7,如栈元素为6, 则7出栈,6入栈,最后结果为2 3 6;
输入输出
第一行输入一个整数0<n<100000,表示待入栈的元素序列
第二行输入n个待入栈的数
输出所有元素入栈后,栈的元素
如:
输入:
3
5 1 2
输出:
1 2
解决思路
类似于插入排序,边输入边入栈,用数组维护栈。
代码
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,*a,i,m;
int l;
scanf("%d",&n);
a=(int *)malloc(sizeof(int)*n);
l=0;
while(n--)
{
scanf("%d",&m);
while(1)
{
if(l==0)
{
a[l]=m;
l++;
break;
}
if(a[l-1]>m)
l--;
if(a[l-1]<=m)
{
a[l]=m;
l++;
break;
}
}
}
for(i=0;i<l-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[l-1]);
return 0;
}