#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#define stackmax 110000
#define stacknum 110000
typedef struct
{
int data; int id;
int next;
}node;
typedef struct
{
node *top;
node *base;
int stacksize;
} qstack;
int Initstack(qstack &s)
{
s.base=(node*)malloc(stackmax*sizeof(node));
if(!s.base)
exit(0);
s.top=s.base;
s.stacksize= stackmax;
return 0;
}
int Pushstack(qstack &s,node n)
{
if(s.top-s.base>=s.stacksize)
{
s.base=(node *)realloc(s.base,(s.stacksize+stacknum)*sizeof(node));
if(!s.base)
exit(0);
s.top=s.base+s.stacksize;
s.stacksize+=stacknum;
}
*(s.top++)=n;
return 0;
}
int empty(qstack &s)
{
if(s.base == s.top)
return 0;
else
return 1;
}
int change(qstack &s,int n,node a[])
{
int i,j;
node q;
for(i=0;i<n;i++)
{
a[i].id=i;
a[i].next=-1;
if(!empty(s))
Pushstack(s,a[i]);
else
{
while(empty(s))
{
q=*(s.top-1);
if(q.data<a[i].data)
{
a[q.id].next=a[i].data;
q=*s.top--;
}
else break;
}
Pushstack(s,a[i]);
}
}
}
int Putstack(node a[],int n)
{
int i,b,f;
for(i=0;i<n;i++)
printf("%d-->%d\n",a[i].data,a[i].next);
printf("\n");
return 0;
}
int main()
{
qstack s;
node a[110000];
int n,r,i,t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
Initstack(s);
for(i=0;i<n;i++)
scanf("%d",&a[i].data);
change(s,n,a);
Putstack(a,n);
}
return 0;
}
3333 数据结构实验之栈六:下一较大值(二)
最新推荐文章于 2020-07-28 22:32:08 发布