这道题的算法思想就是:通过建立一个结构体来管理输入的元素并记录输入元素的位置,将输入的元素依次与栈顶元素相比较,小于栈顶元素的则放入栈中,大于栈顶元素的将其放入结构体的另一个类型中,并将当前栈顶元素出栈。
代码如下:
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
struct node{
int data;
int nextdata;
int pos;//用来记录每个元素的位置*/
}test[100001];
int main(){
int m,n,i;
struct node p;
stack<struct node>st;//定义栈变量st;
cin>>n;
while(n--){
cin>>m;
for(i=0;i<m;i++){
cin>>test[i].data;
test[i].pos=i;
if(st.empty())
st.push(test[i]);
else{
while(!st.empty()){
p=st.top();//将栈顶元素赋值给p;
if(p.data<test[i].data){
test[p.pos].nextdata=test[i].data;
st.pop();
}
else
break;
}
st.push(test[i]);//每次将比栈顶元素小的放入栈中;
}
}
while(!st.empty()){
p=st.top();
test[p.pos].nextdata=-1;
st.pop();
}
for(i=0;i<m;i++){
if(i==0)
cout<<test[i].data<<"-->"<<test[i].nextdata;
else
cout<<endl<<test[i].data<<"-->"<<test[i].nextdata;
}
if(n>=1)
cout<<endl<<endl;
else
cout<<endl;
}
return 0;
}