关于栈的一个问题
答案: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!
}
这位大哥说的问题我自己都发现了,也都改成了目前的这个样子,但是当我输入一个]的时候,栈还是空的,还是会输出匹配的结果啊~~那这个怎么改~
===============================================
这个家一个判断就好了,也就是说如果有右括号,不存在左括号的话(也就是栈空),直接报错,具体的加的代码见后面的程序。
你的代码问题不少,看来这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!
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯