| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7582 人关注过本帖
标题:用顺序栈判断括号是否配对
只看楼主 加入收藏
蛋壳
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-11-13
收藏
 问题点数:0 回复次数:6 
用顺序栈判断括号是否配对

问题描述:利用栈的基本操作实现一个判断算术表达式中包含圆括号,方括号是否正确配对的程序.
基本要求:
1.定义栈的顺序存取结构.
2.分别定义栈的基本操作(初始化,判空,入,出栈等)
3.定义一个函数来判断算术表达式,出现4种情况:左右括号配对次序不正确,右括号多于左括号,
左括号多于右括号,左右括号匹配成功,
4.设计测试函数进行测试


程序如下:

#include "stdio.h"
#include "stdlib.h"
#define MAX 100
typedef struct { char abc[MAX];
int top;
}stack;
int m,n;
int sign;

void initstack(stack *s)
{ s->top=-1; }


void push(stack *s,char ch)
{
if(s->top==MAX-1)
{ printf("stack is full!");}
else
s->abc[++s->top]=ch;
}


void pop(stack *s,char *ch)
{
if(s->top==-1)
{ printf("stack is empty!"); }
else
{ *ch=s->abc[s->top--];

}

int empty(stack s)
{
if(s.top==-1)
return(1);
else
return(0);
}

int test()
{ stack s;
char ch;
initstack(&s);
while((ch=getchar())!='\n')
{ switch(ch)
{ case'(' :
m++;
push(&s,ch);
break;
case'[':
m++;
push(&s,ch);
break;
case'{':
m++;
push(&s,ch);
break;
case(ch==')'):
if(emptyy(s))
sign=1;
else
{ pop(&s,&ch);
if(ch!='(')
sign=1;
}
break;
case(ch==']'):
if(empty(s)
sign=1;
else
{ pop(&s,&ch);
if(ch!=']')
sign=1;
}
break;
case(ch=='}'):
if(empty(s))
sign=1;
else
{ pop(&s,&ch);
if(ch!='}')
sign=1;
}
break;
default:break;
}
}
if(sign==1)
return(2);
if(empty(s))
return(3);

}


main()
{ m=0;
n=0;
sign=0;
int i;
printf("please input the equation:\n");
i=test();
switch(i)
{ case(2):
if(m>n)
printf(" zuo > you \n");
if((m==n)
printf(" zuo != you \n");
if(m<n)
printf(" zuo < you \n");
break;
case(3):printf("you !=zuo \n");break;

default:break;
}
}

搜索更多相关主题的帖子: 括号 顺序 配对 判断 
2006-11-15 12:26
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 

...不用这么麻烦呀

int num=0;

然后遇到'('num++;
遇到')'num--;
如果num<0就不配对
重复循环直到结束

结束后如果num!=0就不配对,否则配对


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-11-15 18:02
smartwind
Rank: 1
等 级:新手上路
威 望:1
帖 子:277
专家分:0
注 册:2006-11-13
收藏
得分:0 
3.定义一个函数来判断算术表达式,出现4种情况:左右括号配对次序不正确,右括号多于左括号,
左括号多于右括号,左右括号匹配成功,

楼上请注意这一项要求

2006-11-16 19:49
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
回复:(smartwind)[quote]3.定义一个函数来判断算术...
仔细看我的算法,我早已考虑了

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-11-16 19:59
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

对要处理一个括号字符串,遇到左括号则直接压栈,否则直接判断当前要处理的右括号与栈顶左括号是否匹配.不匹配则推出,返回信心.
当要处理的字符是右括号,而栈为空则退出,匹配不成功,或字符串已经处理完,但栈中却还有未匹配的左括号,也退出,表示匹配不成功.这些情况都未发生则匹配成功.


倚天照海花无数,流水高山心自知。
2006-11-16 21:24
smartwind
Rank: 1
等 级:新手上路
威 望:1
帖 子:277
专家分:0
注 册:2006-11-13
收藏
得分:0 
以下是引用卧龙孔明在2006-11-15 18:02:35的发言:

...不用这么麻烦呀

int num=0;

然后遇到'('num++;
遇到')'num--;
如果num<0就不配对
重复循环直到结束

结束后如果num!=0就不配对,否则配对

你的算法只能算出左右括号数是不是相等
例如:()x-3)(

上面那个也能算配对吗???


2006-11-17 15:13
若你心无旁人
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-4-3
收藏
得分:0 
是不是有什么语法错误?我怎么运行不了  
2020-04-03 20:23
快速回复:用顺序栈判断括号是否配对
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011791 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved