C使用堆栈作为链表的平衡括号
我试图在C中使用堆栈作为链表对平衡括号进行编码。我面临的问题是,当测试用例值为3时,前两个测试用例工作正常,但最后一个测试用例不总是显示为输出。 例如: 如果输入为: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=(结构
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 */
}