2017-08-11 23 views
1

这是一个使用堆栈检查C中括号余额的程序,但它不像预期的那样工作。这是一个使用堆栈检查C中括号余额的程序,但它不像预期的那样工作

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

struct node { 
    char data; 
    struct node *next; 
}; 
struct node *top = NULL; //top stores address of top element of stack 

void push(char data) { //inserting element 
    struct node *temp = (node *)malloc(sizeof(struct node)); 
    temp->data = data; 
    temp->next = NULL; 
    if (top == NULL) { 
     top = temp; 
     return; 
    } 
    temp->next = top; 
    top = temp; 
} 

void pop() { //removing element 
    struct node *temp = top; 
    if (top == NULL) { 
     printf("No element to delete"); 
     return; 
    } 
    top = top->next; 
    free(temp); 
} 

char Top() { //fn tht return top element of stack 
    return top->data; 
} 

int isEmpty() { 
    if (top != NULL) { 
     return 1; 
    } else 
     return 0; 
} 

int ArePair(char opening, char closing) { 
    if (opening == '(' && closing == ')') 
     return 1; 
    else if (opening == '{' && closing == '}') 
     return 1; 
    else if (opening == '[' && closing == ']') 
     return 1; 
    return 0; 
} 

int Arebalanced(char exp[]) { 
    int i; 
    for (i = 0; i < strlen(exp); i++) { 
     if (exp[i] == '(' || exp[i] == '{' || exp[i] == '[') 
      push(exp[i]); 
     else if (exp[i] == ')' || exp[i] == '}' || exp[i] == ']') { 
      if (isEmpty() || !ArePair(Top(), exp[i])) 
       return 0; 
      else 
       pop(); 
     } 
    } 
    return isEmpty() ? 1 : 0; 
} 

int main() { 
    int i; 
    char a[50]; 
    printf("Enter expession: "); 
    gets(a); 
    if (Arebalanced(a)) { 
     printf("balanced \n"); 
    } else 
     printf("not balanced\n"); 
} 
+0

在'isEmpty':'如果(!顶部= NULL)' - >'如果(上== NULL)' – BLUEPIXY

+0

你遇到什么问题?什么不起作用? –

+0

输入如:(a + b),)(,[(a + y)]或其他任何表达式。 –

回答

0

功能isEmpty()似乎不正确的:它返回1如果堆栈空的?

试试这个版本:

int isEmpty() { return top == NULL; } 

而且不使用gets()

int main(void) { 
    char a[50]; 
    printf("Enter expression: "); 
    if (fgets(a, sizeof a, stdin)) { 
     if (Arebalanced(a)) { 
      printf("balanced \n"); 
     } else { 
      printf("not balanced\n"); 
     } 
    } 
    return 0; 
} 
相关问题