我正在尝试使用CI中的Stacks的平衡括号算法正确地找出了当parantheses相同时的方式(例如“()”或“{}”或“[]”)但是当它们混合时然后我我得到了错误的答案
我的代码中出现了什么错误?
int count=0;
typedef struct node{
struct node *next;
char data;
}node;
node *top;
node *local;
node *temp;
void create(){
top=NULL;
}
void push(char data){
if(top==NULL){
top=malloc(sizeof(node));
top->next=NULL;
top->data=data;
}
else{
temp=malloc(sizeof(node));
temp->data=data;
temp->next=top;
top=temp;
}
count++;
}
char pop(){
local=top;
if(local==NULL){
printf("Empty stack\n");
return;
}
else{
local=local->next;
}
//printf("%d\n",top->data );
return top->data;
free(top);
top=local;
count--;
}
int empty()
{
return top==NULL;
}
int match(char a,char b)
{
if(a=='[' && b==']')
return 1;
if(a=='{' && b=='}')
return 1;
if(a=='(' && b==')')
return 1;
return 0;
}/*End of match()*/
int main()
{
int no, ch, e;
char str[51];
scanf("%s",str);
int z;
int i;
char temp;
int balanced=1;
z=strlen(str);
for(i=0;i<z;i++)
{
if(str[i]=='(' || str[i]=='{' || str[i]=='[')
push(str[i]);
else if(str[i]==')' || str[i]=='}' || str[i]==']')
{temp=pop();
if(empty)
balanced=0;
if(!match(str[i],temp))
balanced=0;
else
balanced=1;
}
}
printf("%d\n",balanced );
return 0;
}
`
答案 0 :(得分:2)
忽略pop()
函数和其余堆栈代码中的问题,我会做平衡算法,如:
int balanced = 0;
for(i = 0; i < strlen(str); ++i)
{
if(str[i]=='(' || str[i]=='{' || str[i]=='[')
{
push(str[i]);
++balanced;
}
else if(str[i]==')' || str[i]=='}' || str[i]==']')
{
temp = pop();
if (match(str[i], temp)) --balanced;
}
}
printf("%d\n", balanced);
如果最后balanced
为0,那么您就知道所有括号都是平衡的。如果它是正数,则表示您缺少或有一个不平衡的右括号。