匿名用户
1级
2014-03-01 回答
进栈 出栈的,队列和栈极其相似,恰好以前做了栈的括号匹配的,给你贴上了
#include<stdio.h>
#include<stdlib.h>
#define LENGTH 20
typedef struct
{
char*top ;
char*base ;
int length ;
}sqstack ;
int check(sqstack*p,char c);
int initstack(sqstack*p);
int push(sqstack*p,char c);
char pop(sqstack*p);
int print(sqstack*p);
int main(void)
{
sqstack*p=NULL ;
char c ;
int i=1,flag ;
p=(sqstack*)malloc(sizeof(sqstack));
initstack(p);
while((c=getchar())!='\n')
{
flag=check(p,c);
if(flag==1)
push(p,c);
if(flag==0)
pop(p);
if(flag==-1)
{
printf("%dinput error\t",i);
i++;
}
}
print(p);
free(p->base);
free(p);
getchar();
return 1 ;
}
int check(sqstack*p,char c)
{
char ch=*(p->top-1);
if(c>='*'&&c<='Z'||c>='a'&&c<='z')
return 3 ;
else if(c=='('||c=='['||c=='{')
return 1 ;
else if((ch=='('&&c==')')||(ch=='['&&c==']')||(ch=='{'&&c=='}'))
return 0 ;
else
return-1 ;
}
int initstack(sqstack*p)
{
while(!(p->base=(char*)malloc((LENGTH)*sizeof(char))))
continue ;
p->top=p->base ;
p->length=0 ;
return 1 ;
}
int push(sqstack*p,char c)
{
if(p->length>=LENGTH)
{
p->base=(char*)realloc(p->base,(LENGTH*2)*sizeof(char));
p->top=p->base+p->length ;
}
*p->top++=c ;
p->length++;
return 1 ;
}
char pop(sqstack*p)
{
char m ;
if(p->top==p->base)
{
printf("error");
exit(0);
}
m=*--p->top ;
p->length--;
return m ;
}
int print(sqstack*p)
{
char*q,c ;
int i=0 ;
q=p->base ;
while(i<p->length)
{ c=*(q+i);printf(" ");
putchar(c);
i++;
}
return 1 ;
}