自定义栈的应用

#include<stdio.h>
typedef struct zu{
int s[105];
int top;
}zu;
zu a,b,c;
bool flag;
void start(int m){
int i;
a.s[0]=b.s[0]=c.s[0]=32767;
for(i=1;i<=m;i++)
a.s[i]=i;
a.top=i-1;
}
int gettop(zu l){
return l.s[l.top];
}
int pop(int z1){
if(flag){
int x;
switch(z1){
case 1: x=gettop(a);
   a.top--;
   break;
case 2: x=gettop(b);
b.top--;
break;
case 3: x=gettop(c);
c.top--;
break;
}
return x;
}
}
void push(int z1,int z2){
int y;
if(flag){
y=pop(z1);
switch(z2){
case 1: if(y>=a.s[a.top])
flag=false;
else{
a.top++;
a.s[a.top]=y;
}
break;
case 2: if(y>=b.s[b.top])
flag=false;
else
{
b.top++;
b.s[b.top]=y;
}
case 3: if(y>=c.s[c.top])
flag=false;
else
{
c.top++;
c.s[c.top]=y;
}
break;


}
}
}
int main(){
int m,n,k,z1,z2,i;
scanf("%d",&k);
while(k--){
scanf("%d%d",&m,&n);
start(m);
flag=true;
for(i=0;i<n;i++){
scanf("%d%d",&z1,&z2);
pop(z1);
push(z1,z2);
}
if(flag)
printf("legal\n");
else
printf("illegal\n");


}
return 0;
}

你可能感兴趣的:(自定义栈的应用)