1 / 12
文档名称:

数据结构 括号匹配实验报告.doc

格式:doc   大小:149KB   页数:12页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据结构 括号匹配实验报告.doc

上传人:cjl201702 2019/12/4 文件大小:149 KB

下载得到文件列表

数据结构 括号匹配实验报告.doc

文档介绍

文档介绍:括号的匹配需求和规格说明(1)实现括号的是否匹配的判定。(2)实现匹配错误的提示。(3)实现栈内容的动态显示。(1)对于括号匹配的判定,首先输入字符串到缓冲区。逐个字符读取字串,遇到的是左括号则入栈,若是右括号,则出栈。出栈的左括号如果和右括号匹配,则一对括号匹配成功;否则,这对括号匹配失败,并给出错误提示。(2)分析括号匹配错误出现的情况,主要有三种:左括号数大于右括号数,左括号与右括号不匹配,右括号数大于左括号数。根据栈的存储情况就能判定出这三种情况,并且实时的将信息放映到可视化控件上。(3)对于匹配过程和栈内容的动态显示,可以用listbox控件实时的显示和更新。窗口上有两个listbox控件,第一个动态显示push和pop动作以及提示错误信息;第二个listbox则动态模拟栈内的存储情况。(1)存储结构Node节点template<classelement>classNode{public: elementele; Node*pre;//前驱指针 Node*next; //后继指针 Node() { pre=NULL; next=NULL; } Node(elemente) { ele=e; pre=NULL; next=NULL; } Node*MakeNode(elemente)//传入参数返回一个节点指针,实现参数的封装。{ Node<element>*temp=newNode(e); returntemp; }};MyListStack链栈template<classelement>classMyListStack{public: Node<element>*base; Node<element>*top; intindex; MyListStack()//初始化链表 { base=newNode<element>(); top=base; index=0; } voidpush(elementn)//push { Node<element>*temp=newNode<element>(n); top->next=temp; temp->pre=top; top=temp; index++; } voidpop(element&out)//pop { out=top->ele; top=top->pre; deletetop->next; top->next=NULL; index--; } BOOLisEmpty();//返回栈是否为空 { if(index) returnFALSE; else returnTRUE; }virtual ~MyListStack()//析构链栈,释放空间。 { Node<element>*p=base; Node<element>*q=p->next; while(p->next!=NULL) { deletep; p=q; q=p->next; } deletep; } };(2)涉及的操作voidCKuohaopipeiDlg::OnButtonClear()//清空窗口控件。voidCKuohaopipeiDlg::OnButtonSlowShow(//慢速显示运行过程。voidCKuohaopipeiDlg::OnOK()//进行括号匹配过程。voidCKuohaopipeiDlg::OnSelchangeListInfo()//此函数响应列表框中光标改变的消息,定位错误的位置。(此部分见源代码中注释)(1)流程示意图 图表1匹配流程示意图(2)功能示意图 (1)在编辑框中输入表达式串。 (2)点击开始匹配测试则进行快速匹配。 (3)点击慢速运行。 (4)点击错误信息,定位错误字符。 输入:{{{[1+1]+(A+d)}}}结果:正确 输入:{{{{}}}}))结果:错误 输入:}()){}}结果:错误 输入:([][]))结果:错误 (1)源代码voidCKuohaopipeiDlg::OnOK(){ //TODO:Addextravalidationhere UpdateData(TRUE); //MyListStack<char>ls; ();//清空list ();//清空list BOOLisNum=0; BOOLisError=0; intinputlength=(); if(inputlength==0) { MessageBox("输入值不能为空!","提示");//