数据结构括号匹配实验解说.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
括号的匹配 需求和规格说明 (1)实现括号的是否匹配的判定。 (2)实现匹配错误的提示。 (3)实现栈内容的动态显示。 2.设计 2.1.设计思想 (1)对于括号匹配的判定,首先输入字符串到缓冲区。逐个字符读取字串,遇到的是左括号则入栈,若是右括号,则出栈。出栈的左括号如果和右括号匹配,则一对括号匹配成功;否则,这对括号匹配失败,并给出错误提示。 (2)分析括号匹配错误出现的情况,主要有三种:左括号数大于右括号数,左括号与右括号不匹配,右括号数大于左括号数。根据栈的存储情况就能判定出这三种情况,并且实时的将信息放映到可视化控件上。 (3) 对于匹配过程和栈内容的动态显示,可以用listbox控件实时的显示和更新。窗口上有两个listbox控件,第一个动态显示push和pop动作以及提示错误信息;第二个listbox则动态模拟栈内的存储情况。 2.2.设计表示 (1)存储结构 Node节点 template class element class Node { public: element ele; Node *pre; //前驱指针 Node *next; //后继指针 Node() { pre=NULL; next=NULL; } Node(element e) { ele=e; pre=NULL; next=NULL; } Node * MakeNode(element e)//传入参数返回一个节点指针,实现参数的封装。 { Nodeelement *temp=new Node(e); return temp; } }; MyListStack链栈 template class element class MyListStack { public: Nodeelement *base; Nodeelement *top; int index; MyListStack() //初始化链表 { base=new Nodeelement(); top=base; index=0; } void push(element n) //push { Nodeelement *temp=new Nodeelement(n); top-next=temp; temp-pre=top; top=temp; index++; } void pop(element out) //pop { out=top-ele; top=top-pre; delete top-next; top-next=NULL; index--; } BOOL isEmpty(); //返回栈是否为空 { if(index) return FALSE; else return TRUE; } virtual ~MyListStack() //析构链栈,释放空间。 { Nodeelement *p=base; Nodeelement *q=p-next; while(p-next!=NULL) { delete p; p=q; q=p-next; } delete p; } }; (2)涉及的操作 void CKuohaopipeiDlg::OnButtonClear() //清空窗口控件。 void CKuohaopipeiDlg::OnButtonSlowShow( //慢速显示运行过程。 void CKuohaopipeiDlg::OnOK() //进行括号匹配过程。 void CKuohaopipeiDlg::OnSelchangeListInfo() //此函数响应列表框中光标改变的消息,定位错误的位置。 2.3.实现注释 (此部分见源代码中注释) 2.4.详细设计表示 (1)流程示意图 图表  SEQ 图表 \* ARABIC 1 匹配流程示意图 (2)功能示意图 图表  SEQ 图表 \* ARABIC 2 功能示意图 3.用户手册 (1)在编辑框中输入表达式串。 (2)点击开始匹配测试则进行快速匹配。 (3)点击慢速运行。 (4)点击错误信息,定位错误字符。 4.调试报告 输入:{{{[1+1]+(A+d)}}} 结果:正确 输入:{{{{}}}})) 结果:错误 输入:}()){}} 结果:错误 输入:([][])) 结果

文档评论(0)

***** + 关注
实名认证
内容提供者

我是自由职业者,从事文档的创作工作。

1亿VIP精品文档

相关文档