永发信息网

关于栈的一个问题

答案:1  悬赏:0  手机版
解决时间 2021-02-28 07:05
  • 提问者网友:谁的错
  • 2021-02-27 12:23
关于栈的一个问题
最佳答案
  • 五星知识达人网友:琴狂剑也妄
  • 2021-02-27 12:58
===============================================
这位大哥说的问题我自己都发现了,也都改成了目前的这个样子,但是当我输入一个]的时候,栈还是空的,还是会输出匹配的结果啊~~那这个怎么改~
===============================================
这个家一个判断就好了,也就是说如果有右括号,不存在左括号的话(也就是栈空),直接报错,具体的加的代码见后面的程序。

你的代码问题不少,看来这100分不好拿啊,
都帮你改好了,具体的看一下注释,改的还都是main函数中的:

#include

#define MaxSize 100
typedef char ElemType;
typedef struct
{
ElemType data[MaxSize];
int top;
}STACK; //定义栈

//初始化栈
void InitStack(STACK *s)
{
s->top=-1;
}

//入栈
void Push(STACK *s,ElemType x)
{
if (s->top==MaxSize-1)
{
printf("\nStack is full!");
}
s->top++;
s->data[s->top]=x;
}

//判断顺序栈是否为空
int Empty(STACK *s)
{
return(s->top==-1?1:0);
}

//删除栈顶元素
Pop(STACK *s)
{
if (Empty(s))
{
printf("\nStack is free!");
return 0;
}
s->top--;
}

//取栈顶元素
GetTop(STACK *s)
{
ElemType x;
if (Empty(s))
{
printf("\nStack is free!");
return 0;
}
x=s->data[s->top];
return x;
}

main()
{
ElemType str[MaxSize];
int l;
int i;
STACK st; //用作测试的栈
int flag=0;//在这里加一个标志位

printf("Please input your brackets:");
scanf("%s",str); //输入括号
l=strlen(str);

InitStack(&st);//注意,这里需要加上初始化

for (i=0;i {
if(((str[i]=='}')||(str[i]==']')||(str[i]==')'))&&(Empty(&st))) //在这里加上有右括号,不存在左括号的话(也就是栈空),直接报错处理
{
flag=1;//将标志位置上1
break;//直接跳出
}

if ((str[i]=='{')||(str[i]=='[')||(str[i]=='('))
Push(&st,str[i]);

else
{
// if (str[i]==GetTop(&st)) //这个判断条件不对,应该是当出现'}',')'或者']'时,判断是否和栈顶匹配,而不是阿婆那段是否和栈顶相等
if((str[i]=='}'&&GetTop(&st)=='{')||(str[i]==']'&&GetTop(&st)=='[')||(str[i]==')'&&GetTop(&st)=='(')) //判断条件改成这个
{
Pop(&st);
}
//else //这个else不要了,应该在最后同意判断,否则的话一些括号间数据也被当成错误字符处理了
//{printf("error!");}
}
}
if ((Empty(&st)) &&(flag==0))//在原先基础上加上对于标志位的判断
printf("匹配!");
else printf("error!"); //如果最后栈不为空,说明没有完全匹配完毕,输出error!
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯