数据结构课程设计---括号匹配.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
目录 1 问题描述 1 问题描述 2 题目 2 问题 2 1.3 要求 1.3 要求 2 2 设计 2 存储结构设计 2 2.2 主要算法设计 3 2.3 测试用例及测试结果 6 2.2 主要算法设计 3 2.3 测试用例及测试结果 6 3 调试报告 9 4 对设计和编码的讨论和分析 2..1. 设计 2..1.. 对编码的讨论 2..1. 5 总结和体会 2..3 附录一 2..4 本科生课程设计成绩评定表 错...误... !未定义书签 数据结构课程设计 ——判别括号配对 问题描述 题目: 判别括号配对 问题: 一个算术表达式含圆括号、中括号、花括号 ,且它们可任意嵌套使用。写一程序,判断 任一算术表达式中所含括号是否正确配对。 要求: (1)表达式从键盘输入。 (2)利用栈求解此问题。 (3)测试用例自己设计。 设计 存储结构设计 题目要求利用栈来求解此问题,因此选择顺序栈作为存储结构,具体表示如下: #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef struct{ char *base; char *top; int stacksize; }SqStack; 主要算法设计 2.2.1 算法思想 文字描述 从键盘输入一个表达式; 逐个扫描表达式中的字符; 当遇到左括号时,将左括号入栈; 继续扫描,将此后遇到的第一个右括号与栈顶元素比较,若匹配,则栈顶元素出栈; 否则,继续扫描; 当整个表达式扫描完以后,判断栈内是否还有元素,若有,则括号不匹配; 若栈为空,则括号配对成功; 在括号配对不成功的情况下,利用栈顶栈底元素的差值,可以对左右括号数进行比较 流程图表示 } } 算法 void CharIsCorrect(char a[]){ SqStack S; char e; int n,c; InitStack(S);//建立一个空栈 n=strlen(a);// 求表达式长度 int d=0,b=0; for(int i=0;in;i++){ if((a[i]==()||(a[i]==[)||(a[i]=={)) Push(S,a[i]); else{ c=StackEmpty(S); if ((c==1)((a[i]==))||(a[i]==])||(a[i]==})))// 栈为空且当前扫描的字符为右括 号时,右括号多于左括号 ++b; else{ e=GetTop(S); if (((a[i]==))(e==())||((a[i]==])(e==[))||((a[i]==})(e=={)))// 括号匹配时满足的条件 e=Pop(S); else if ((a[i]==))||(a[i]==])||(a[i]==})) ++d; 2)表达式不含除括号外其他字符且左括号少于右括号的情况: 2)表达式不含除括号外其他字符且左括号少于右括号的情况: }// 扫描字符串,左括号进栈,右括号出栈 if(StackEmpty(S)==1(b==0)(d==0)) cout 左右括号配对正确 endl;// 栈为空时,括号匹配 else cout 左右括号不匹配且左括号与右括号个数差为 S.top-S.base-d-b 个 endl;// 正数表示左括号比右括号多,负数则相反 测试用例及测试结果 1)表达式不含除括号外其他字符,配对正确的情况: 4)表达式含任意字符且左右括号个数相同但配对不成功的情况: 5)表达式仅含括号且括号个数相同单不匹配的情况: 6)表达式仅含括号且左括号对于右括号的情况: 调试报告 本次课程设计, 主要的调试过程在于对于判别函数的调试, 但是除此之外, 由于编译过 程中发现了一些错误,对于栈的一些基本操作,以及 main 函数,也进行了调试,其中遇 到的主要问题如下: (1)大小写出错 解决办法:将所有小写 s 改为大写 S 即可 (2)在写“判断栈是否为空”的操作时,将函数的类型标示符写错,导致了如下错误: 解决办法:将“void”改为i“nt ”后,能够正常运行 (3)判断配对函数中的形参是字符数组,但是从键盘中输入的是字符串,因此在主函数 中,当用 cin 进行输入时出错: 解决办法:将 char a 改为 char a[20] 后编译不出现错误 除了以上错误之外,还有一些小错误,编号如下: Error C 2146、 error C 2143 、 error C 2109 等等,一般再仔细检查后,能够检出错 误。 以下,对主要程序进行调试,过程如下: 第一次成型的主体部分代码如下: void CharIsCorrect(char a[]){ SqStack S;

文档评论(0)

jinxuetong + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档