- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
括号匹配算法(Parenthesis matching algorithm)
括号匹配算法(Parenthesis matching algorithm)
括号匹配算法.txt
#包括 stdio. h
#定义为16
typedef struct {
int数据[为];
栈的顶部;
int基地;
} seqstack;/ * * /顺序栈的定义
以下为函数声明/ * * /
无效initstack(seqstack *);
int空(seqstack *);
无效的推(seqstack *,int);
国际流行(seqstack *);
int GetTop(seqstack *);
操作(int,char,int int);
字符(字符、字符)进行;
int(char);
国际evalexpres(void);
定义两个栈分别存放运算符和操作数/ * * /
seqstack stackr,stackd;
主函数/ * * /
国际main()
{
int v;
ch;
而(1)
{
printf(“不@@@@@@@@本程序的功能为:用顺序栈实现整型算术表达式的求值@@@@@@@@ \n”);
printf(“不@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - 20-10-07 17:47 - @@@@@@ \n”);
V = evalexpres();
printf(“结果:%d”,V);
以下为程序控制/ * * /
printf(“ninput Q退出和进入再跑:“);
做{
scanf(“%c”,和CH);
如果(CH = =“Q”| | CH = =“Q”)
退出(0);
}而(CH!= \n);
系统(“华彩”);
}
返回0;
}
无效initstack(seqstack *)
{ -顶= 0;
S -基础= 0;
} /*初始化栈*/
int空(seqstack *)
{如果(S -顶= = S -基地)
返回1;
其他的
返回0;
} /*判断栈是否为空*/
无效的推(seqstack *,int x)
{
如果(S -顶= = MAXSIZE)
{ printf(“过流!\n”);
退出(0);
}
其他的
{ -数据[顶] = x -;
S -顶+ +;
}
} /*进栈*/
国际流行(seqstack *)
{ int E;
如果(空(S))
{ printf(“流下!\n”);
返回0;
} /*下溢*/
其他的
{ -顶;
E = S -数据- [顶]的;
返回E;
}
} /*出栈*/
int GetTop(seqstack *)/ * * /取栈顶元素
{
如果(空(S))
{ printf(“流下!\n”);
返回0;
}
其他的
回报-数据- [ 2 ];
}
国际evalexpres(void)/ * * /表达式求解函数
{
a,b,i = 0,S = 0;
char c [ 80 ],R;
initstack(与stackr);
推(与stackr,“#”);
initstack(与stackd);
printf(“请输入表达式并以”#”结束:”);
获取(C);
而(C [我]!=“#”| |公司(与stackr)!=“#”)
{
如果(!在(C [我]))/ * * /判断读入的字符不是运算符是则进栈
{如果(C [我] =“0” C [我] =“9”)
{
+ = C [我] - 0;
而(!(C + +中的[我]))/ * * /此处实现的功能为当输入的数字为多位数时
{ * = 10;
+ = C [我] - 0;
}
推(与stackd,S + 0);
S = 0;
}
其他的
{
printf(“你输入的表达式有误!\n”);
返回0;
}
}
其他的
开关(进行(公司(与stackr),C [我]))/ * * /此函数用来比较读取的运算符和栈顶运算符的优先级
{
“”:栈顶的元素优先级高/ * * /
推(与stackr,C [我]);
我+ +;
打破;
“=”:遇到匹配的小括号时则去掉他/ * * /
流行(与stackr);
我+ +;
打破;
“”:栈顶的优先级低则出栈并将结果写入栈内/ * * /
R =流行(与stackr);
a流行(与stackd)- 0;
B =流行(与stackd)- 0;
推(与stackd,操作(a,r,b));
打破;
}
}
回报(公司(与stackd)- 0”);/*返回运算结果*/
}
int(char c)/ *问题2:解决在函数问题:判断C是否为运算符是返回否则返回0 / 1
{
ch [ 7 ] = {“+”、“-”、“*”、“/”、“# 、(,) };
int i;
为(i = 0;i 7;i++)
如果(C = = CH [我])
返回1
您可能关注的文档
- 小学英语六年级时态变换复习资料(The sixth grade primary school English tense transformation review).doc
- 小学英语所有句型转换的方法(All primary school English sentence conversion method).doc
- 小学语文(人教版)(Chinese primary school (PEP)).doc
- 小学生知识(Elementary knowledge).doc
- 小学语文2(2 Chinese primary school).doc
- 小学语文《父亲和鸟》教学设计(Primary school language father and bird teaching design).doc
- 小学语文基本功考试(Primary school language basic skills exam).doc
- 小学语文一年级上册课文及儿歌(The first grade primary school Chinese text book and songs).doc
- 小学语文基础知识(Basic knowledge of primary school Chinese).doc
- 小学语文感悟型教学模式的构想和实践(Primary school Chinese perception concept teaching mode and Practice).doc
文档评论(0)