用栈检查括号是否匹配的问题(急!!!再线等)

来源:百度知道 编辑:UC知道 时间:2024/06/20 14:34:39
假设一个输入字符串中包含圆括号、方括号和花括号三种类型的括号,以及其它一些任意字符。编写程序,判别串中的括号是否正确匹配,即:
即([]()),({[]()})位匹配;[()),[(])位不匹配。
我写了一段代码如下:
#include <stdio.h>

typedef struct bracket
{char c;
struct bracket *next;
}BRACKET;
BRACKET *top=NULL;

BRACKET *pushstack(BRACKET *top,char c)
{BRACKET *p=(BRACKET*)malloc(sizeof(struct bracket));
p->c=c;
if(top==NULL)
{p->next=NULL;
top=p;}
else
{p->next=top;
top=p;
}
printf("%c\n",top->c);
return top;
}
BRACKET *popstack(BRACKET *top)
{BRACKET *p;
p=top;
if(top==NULL)
return top;
else
{top=top->next;
free(p);
return top;
}
}
int dispose(char *str)
{for(;*str;str++)
{printf("%c\n",*str);
if(*str=='('||*str=='{'||*str=='[')pushstack(top,*str);
else if(*str==')')

哥们我帮你看看.
别急..我才把程序排成标准格式

假设:{}()}
再)后top=NULL,但是}要求取top->c所以出错

下面是我按你的模式改的,有错误请提出来,

#include <stdio.h>
#include<malloc.h>

typedef struct bracket
{
char c;
struct bracket *next;
}BRACKET;
BRACKET *top=NULL;

BRACKET *pushstack(BRACKET *top,char c)
{
BRACKET *p=(BRACKET*)malloc(sizeof(struct bracket));
p->c=c;
if(top==NULL)
{
p->next=NULL;
top=p;
}
else
{
p->next=top;
top=p;
}
printf("%c入盏\n",top->c);
return top;
}
BRACKET *popstack(BRACKET *top)
{
BRACKET *p;
p=top;
if(top==NULL)
return top;
else
{
top=top->next;
free(p);
return top;
}
}
int dispose(char *str)
{
for(;*str;str++)
{
printf("%c\n",*st