主题:括号匹配(用栈的)请大家棒改改,谢谢
#include <stdio.h>
#include <malloc.h>
#define M 100
typedef struct
{
int str[M];
int top;
}Seqstack;
void InitStack(Seqstack *s)
{
s->top=-1;
}
int push(Seqstack *s,char x)
{
if(s->top==M-1)
return 0;
s->top++;
s->str[s->top]=x;
return 1;
}
int pop(Seqstack *s,char *x)
{
if(s->top=-1)
return 0;
else
{
*x=s->str[s->top];
s->top--;
}
}
int gettop(Seqstack *s,char x)
{
if(s->top==-1)
return 0;
else
{
x=s->str[s->top];
return 1;
}
}
int isempty(Seqstack *s)
{
if(s->top==-1)
return 1;
else 0;
}
int match(char ch,char b)
{
if(ch==b)
return 1;
}
int BrackeMatch(char *str)
{
Seqstack *s;int i;char *ch,b;
InitStack(s);
for(i=0;str[i]!='\0';i++)
{
switch(str[i])
{
case'(':
case'[':
case'{':
push(s,*ch);
break;
case')':
case']':
case'}':
if(isempty(s))
{printf("\n左括号多余!");return 0;}
else
{
gettop(s,*ch);
b=str[i];
if(match(*ch,b))
pop(s,ch);
else
{printf("\n对应的左右括号不同类!");return 0;}
}
}
}
if(isempty(s))
printf("匹配!");
else
printf("\n不匹配!");
}
void main()
{
int i;
char x;
char str[M];
Seqstack *s;
printf("请输入括号: \n");
for(i=0;i<=M;i++)
scanf("%s",str[i]);
BrackeMatch(str);
}
#include <malloc.h>
#define M 100
typedef struct
{
int str[M];
int top;
}Seqstack;
void InitStack(Seqstack *s)
{
s->top=-1;
}
int push(Seqstack *s,char x)
{
if(s->top==M-1)
return 0;
s->top++;
s->str[s->top]=x;
return 1;
}
int pop(Seqstack *s,char *x)
{
if(s->top=-1)
return 0;
else
{
*x=s->str[s->top];
s->top--;
}
}
int gettop(Seqstack *s,char x)
{
if(s->top==-1)
return 0;
else
{
x=s->str[s->top];
return 1;
}
}
int isempty(Seqstack *s)
{
if(s->top==-1)
return 1;
else 0;
}
int match(char ch,char b)
{
if(ch==b)
return 1;
}
int BrackeMatch(char *str)
{
Seqstack *s;int i;char *ch,b;
InitStack(s);
for(i=0;str[i]!='\0';i++)
{
switch(str[i])
{
case'(':
case'[':
case'{':
push(s,*ch);
break;
case')':
case']':
case'}':
if(isempty(s))
{printf("\n左括号多余!");return 0;}
else
{
gettop(s,*ch);
b=str[i];
if(match(*ch,b))
pop(s,ch);
else
{printf("\n对应的左右括号不同类!");return 0;}
}
}
}
if(isempty(s))
printf("匹配!");
else
printf("\n不匹配!");
}
void main()
{
int i;
char x;
char str[M];
Seqstack *s;
printf("请输入括号: \n");
for(i=0;i<=M;i++)
scanf("%s",str[i]);
BrackeMatch(str);
}