关于栈的简单应用,不难,我的思路一般是:让in()和out(j)比,不相等时,in(i)入栈,相等时,top和out(j)比较,相等时:top--,j++;不相等时,继续in()和out(j)的比较。。。。最后判断栈是否为空就可以了。。。。
#include<stdio.h>
typedef struct
{
char data[10];
int top;
}seqstack;
void PUSH(seqstack *s,char x)
{
s->top++;
s->data[s->top]=x;
}
void POP(seqstack *s)
{
s->top--;
}
int isEmpty(seqstack *s)
{
if(s->top==-1)
return 1;
else
return 0;
}
int main()
{
int i,j,n;
char in[10],out[10];
seqstack a;
seqstack *s;
s=&a;
while(scanf("%d",&n)!=EOF)
{
s->top=-1;
j=0;
scanf("%s%s",in,out);
for(i=0;i<n;i++)
{
if(in[i]!=out[j])
PUSH(s,in[i]);
else
{
PUSH(s,in[i]);
while(s->data[s->top]==out[j])
{
POP(s);
j++;
if(isEmpty(s))
break;
}
}
}
if(!isEmpty(s))
printf("No.\nFINISH\n");
else
{
printf("Yes.\n");
j=0;
s->top=-1;
for(i=0;i<n;i++)
{
if(in[i]!=out[j])
{
PUSH(s,in[i]);
printf("in\n");
}
else
{
PUSH(s,in[i]);
printf("in\n");
while(s->data[s->top]==out[j])
{
POP(s);
printf("out\n");
j++;
if(isEmpty(s))
break;
}
}
}
printf("FINISH\n");
}
}
return 0;
}