#include
#include
#define N 10000
typedef int datatype;
typedef struct link stack;
struct link {
int top;
int data[N];
};
void push(stack *st,datatype x);
void pop(stack *st);
int main() {
int i,j,k,n;
int a[N];
stack *st;
scanf("%d",&n);
for(i=1; i<=n; i++) {
scanf("%d",&a[i]);
}
st=(stack*)malloc(sizeof(stack));
st->top=0;
i=1,j=i+1;
while(iif(a[i]>a[j]) {
push(st,a[j]);
i++;
j++;
}else{
st->data[1]=a[j];
pop(st);
}
}
return 0;
}
void push(stack *st,datatype x) {
if(st->top==N) {
printf("\n栈满");
exit(1);
}
st->data[st->top]=x;
st->top++;
}
void pop(stack *st) {
if(st->top==0) {
printf("\n栈空");
exit(1);
}
st->top--;
}
刚学数据结构没思路
使用单调栈算法解决,单调栈算法的基本思想是维护一个递减的栈,每当新元素加入栈时,将栈中所有小于该元素的元素弹出栈,然后将该元素入栈。这样可以保证栈中元素的递减性质。对于每个元素,找到它右边第一个比它大的元素,可以从右往左扫描数组,维护一个单调栈,栈中存储数组的下标,每次加入新的元素时,如果栈顶元素小于当前元素,说明栈顶元素的右边第一个比它大的元素就是当前元素,将栈顶元素出栈,并记录当前元素为该下标对应的答案。最终遍历完成后,栈中剩下的元素对应的答案为-1,表示右边没有比它大的元素。
如有帮助望采纳。