微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C使用括号作为链表的平衡括号

如何解决C使用括号作为链表的平衡括号

我正在尝试使用Stack作为C中的链表来对Balanced括号进行编码。我面临的问题是,当测试用例值为3时,前两个测试用例工作正常,但是最后一个始终显示为否。输出。 例如: 如果输入是:

3

{[()]}

{[(])}

{{[[(())]]}}

预期输出为:

YES
NO 
YES

实际输出为:

YES
NO 
NO
#include <stdio.h>
#include <stdlib.h>

struct Node
{
    char data;
    struct Node *next;
}*top = NULL;

void push(char x)
{
    struct Node *t;
    t = (struct Node *)malloc(sizeof(struct Node));
    if(t == NULL)
        printf("Stack is Overflow\n");
    else
    {
        t->data = x;
        t->next = top;
        top=t;
    }
}

char pop()
{
    char x = -1;
    struct Node *p;
    if(top == NULL)
        printf("Stack is Underflow\n");
    else
    {
        p=top;
        top=top->next;
        x=p->data;
        free(p);
    }
    return x;
}

int isEmpty()
{
    return top?0:1;
}

char stackTop()
{
    if(!isEmpty())
        return top->data;
    return '0';
}

int isBalanced(char *exp)
{
    int i;
    for(i=0;exp[i]!='\0';i++)
    {
        if(exp[i] == '(' || exp[i] == '{' || exp[i] == '[')
            push(exp[i]);
        else if(exp[i] == ')' || exp[i] == '}' || exp[i] == ']')
        {
            if(isEmpty())
                return 0;
            if(stackTop() == '(' && exp[i] == ')')
                pop();
            else if(stackTop() == '{' && exp[i] == '}')
                pop();
            else if(stackTop() == '[' && exp[i] == ']')
                pop();
            else
                return 0;
        }
    }
        if(isEmpty())
            return 1;
        else
            return 0;
}


int main()
{
    char *exp;
    int t;
    scanf("%d",&t);
    while(t--)
    {
        exp = (char*)malloc(10000*sizeof(char));
        scanf("%s",exp);
        if(isBalanced(exp))
            printf("YES\n");
        else 
            printf("NO\n");
        free(exp);
    }
    return 0;
}

解决方法

处理完每种情况后,您忘记了重置堆栈。

    while(t--)
    {
        exp = (char*)malloc(10000*sizeof(char));
        scanf("%s",exp);
        if(isBalanced(exp))
            printf("YES\n");
        else 
            printf("NO\n");
        free(exp);
        while (!isEmpty()) pop(); /* add this */
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。