Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C使用堆栈作为链表的平衡括号_C_Data Structures_Linked List_Stack - Fatal编程技术网

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

C使用堆栈作为链表的平衡括号,c,data-structures,linked-list,stack,C,Data Structures,Linked List,Stack,我试图在C中使用堆栈作为链表对平衡括号进行编码。我面临的问题是,当测试用例值为3时,前两个测试用例工作正常,但最后一个测试用例不总是显示为输出。 例如: 如果输入为: 3 {[()]} {[(])} {{[[(())]]}} 预期产出为: YES NO YES YES NO NO 实际输出为: YES NO YES YES NO NO #包括 #包括 结构体类型 { 字符数据; 结构节点*下一步; }*top=NULL; 无效推送(字符x) { 结构节点*t; t=(结构

我试图在C中使用堆栈作为链表对平衡括号进行编码。我面临的问题是,当测试用例值为3时,前两个测试用例工作正常,但最后一个测试用例不总是显示为输出。 例如: 如果输入为:

3

{[()]}

{[(])}

{{[[(())]]}}
预期产出为:

YES
NO 
YES
YES
NO 
NO
实际输出为:

YES
NO 
YES
YES
NO 
NO
#包括
#包括
结构体类型
{
字符数据;
结构节点*下一步;
}*top=NULL;
无效推送(字符x)
{
结构节点*t;
t=(结构节点*)malloc(sizeof(结构节点));
如果(t==NULL)
printf(“堆栈溢出\n”);
其他的
{
t->data=x;
t->next=top;
top=t;
}
}
char pop()
{
字符x=-1;
结构节点*p;
if(top==NULL)
printf(“堆栈下溢\n”);
其他的
{
p=顶部;
顶部=顶部->下一步;
x=p->数据;
自由基(p);
}
返回x;
}
int isEmpty()
{
返回顶部?0:1;
}
char stackTop()
{
如果(!isEmpty())
返回top->data;
返回“0”;
}
整型isBalanced(字符*exp)
{
int i;
对于(i=0;exp[i]!='\0';i++)
{
如果(exp[i]='('| | exp[i]='{'| | exp[i]='['))
推(exp[i]);
else如果(exp[i]='')| | exp[i]='}'| | exp[i]=']))
{
if(isEmpty())
返回0;
如果(stackTop()=='('&&exp[i]==')')
pop();
else if(stackTop()='{'&&exp[i]='}')
pop();
else if(stackTop()='['&&exp[i]=']')
pop();
其他的
返回0;
}
}
if(isEmpty())
返回1;
其他的
返回0;
}
int main()
{
字符*exp;
int t;
scanf(“%d”、&t);
而(t--)
{
exp=(char*)malloc(10000*sizeof(char));
扫描频率(“%s”,exp);
如果(isBalanced(exp))
printf(“是\n”);
其他的
printf(“否”);
免费(exp);
}
返回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 */
    }