3333 数据结构实验之栈六:下一较大值(二)

来源:互联网 发布:农村淘宝服务站图片 编辑:程序博客网 时间:2024/06/05 09:02

数据结构实验之栈六:下一较大值(二)

#include<cstdio>#include<cstdlib>#include<iostream>#include<cstring>#define stackmax 110000#define stacknum 110000typedef 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;}
0 0