数据结构括号匹配实验讲义Word格式.docx

上传人:b****5 文档编号:17135330 上传时间:2022-11-28 格式:DOCX 页数:16 大小:86.14KB
下载 相关 举报
数据结构括号匹配实验讲义Word格式.docx_第1页
第1页 / 共16页
数据结构括号匹配实验讲义Word格式.docx_第2页
第2页 / 共16页
数据结构括号匹配实验讲义Word格式.docx_第3页
第3页 / 共16页
数据结构括号匹配实验讲义Word格式.docx_第4页
第4页 / 共16页
数据结构括号匹配实验讲义Word格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数据结构括号匹配实验讲义Word格式.docx

《数据结构括号匹配实验讲义Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构括号匹配实验讲义Word格式.docx(16页珍藏版)》请在冰豆网上搜索。

数据结构括号匹配实验讲义Word格式.docx

//后继指针

Node()

{

pre=NULL;

next=NULL;

}

Node(elemente)

{

ele=e;

Node*MakeNode(elemente)//传入参数返回一个节点指针,实现参数的封装。

Node<

element>

*temp=newNode(e);

returntemp;

};

MyListStack链栈

classMyListStack

Node<

*base;

*top;

intindex;

MyListStack()//初始化链表

base=newNode<

();

top=base;

index=0;

voidpush(elementn)//push

*temp=newNode<

(n);

top->

next=temp;

temp->

pre=top;

top=temp;

index++;

voidpop(element&

out)//pop

out=top->

ele;

top=top->

pre;

deletetop->

next;

next=NULL;

index--;

BOOLisEmpty();

//返回栈是否为空

if(index)

returnFALSE;

else

returnTRUE;

virtual~MyListStack()//析构链栈,释放空间。

*p=base;

*q=p->

while(p->

next!

=NULL)

{

deletep;

p=q;

q=p->

}

deletep;

(2)涉及的操作

voidCKuohaopipeiDlg:

:

OnButtonClear()//清空窗口控件。

OnButtonSlowShow(//慢速显示运行过程。

OnOK()//进行括号匹配过程。

OnSelchangeListInfo()//此函数响应列表框中光标改变的消息,定位错误的位置。

2.3.实现注释

(此部分见源代码中注释)

2.4.详细设计表示

(1)流程示意图

图表1匹配流程示意图

(2)功能示意图

图表2功能示意图

3.用户手册

(1)在编辑框中输入表达式串。

(2)点击开始匹配测试则进行快速匹配。

(3)点击慢速运行。

(4)点击错误信息,定位错误字符。

4.调试报告

输入:

{{{[1+1]+(A+d)}}}结果:

正确

{{{{}}}}))结果:

错误

}()){}}结果:

([][]))结果:

5.源代码及运行结果截图

(1)源代码

OnOK()

//TODO:

Addextravalidationhere

UpdateData(TRUE);

//MyListStack<

char>

ls;

m_list_info.ResetContent();

//清空list

m_list_stack.ResetContent();

BOOLisNum=0;

BOOLisError=0;

intinputlength=m_cstring_input.GetLength();

if(inputlength==0)

MessageBox("

输入值不能为空!

"

"

提示"

);

//如果字符串为空

else

for(intj=0;

j<

inputlength;

j++)//获取输入字串的长度

{

charstr_in=m_cstring_input.GetAt(j);

if(str_in=='

('

||str_in=='

['

{'

{

isNum=1;

ls.push(str_in);

//若为左括号则入栈

CStringtemp;

temp.Format("

push%cintostack\r\n"

str_in);

m_list_info.AddString(temp);

}

elseif(str_in=='

)'

]'

}'

)//若为右括号则出栈匹配

charstr_out;

if(!

ls.isEmpty())

{

ls.pop(str_out);

BOOLflag=0;

if(str_in=='

&

str_out=='

{

flag=1;

}

if(!

flag//如果匹配不成功,则isError变量为1,并更新提示信息。

isError=1;

CStringtemp;

temp.Format("

push%cbutcannotmatch%c<

--error!

str_out,str_in);

m_list_info.AddString(temp);

 

else//如果匹配成功,更新提示信息。

CStringtemp;

temp.Format("

pop%coutofstack\r\n"

str_out);

m_list_info.AddString(temp);

}

else//如果当前栈为空,且输入为右括号时,isError为1,并更新控件信息。

isError=1;

CStringtemp;

temp.Format("

cannotmatch%c<

m_list_info.AddString(temp);

m_list_info.RedrawWindow();

UpdateData(FALSE);

if(!

ls.isEmpty())//如果栈最后不为空,且栈中还有左括号,则提示栈中左括号没有匹配完成。

chartemp;

ls.pop(temp);

ls.push(temp);

if(temp=='

||temp=='

temp="

stackisnotempty<

;

if(ls.isEmpty()&

isNum==1&

!

isError)

m_list_info.AddString("

matchsuccess!

MessageBox("

匹配成功!

elseif((!

ls.isEmpty()&

isNum==1)||isError)

m_list_info.AddString("

matchfailed!

匹配失败!

elseif(isNum==0)

表达式中未出现括号!

chartemp;

while(ls.index!

=0)

ls.pop(temp);

((CEdit*)GetDlgItem(IDC_EDIT_INPUT))->

SetFocus();

SetSel(0,-1);

}

OnButtonSlowShow()//慢速显示运行过程

Addyourcontrolnotificationhandlercodehere

//TODO:

m_list_info.SetRedraw();

m_list_stack.SetRedraw();

//判断是否出现括号

//判断是否出现错误

//获取输入字串长度

j++)//逐次获取字符

)//如果为左括弧,则入栈。

m_list_info.SetCurSel(m_list_info.GetCount()-1);

%c"

m_list_stack.AddString(temp);

)//如果为右括弧

//pop括号,判断是否匹配

flag)

//如果不匹配,则此变量为真,便于函数末尾判断。

//将信息传入控件

m_list_stack.DeleteString(m_list_stack.GetCount()-1);

m_list_info.SetCurSel(m_list_info.GetCount()-1);

else//如果匹配成功,将信息显示到控件。

m_list_stack.DeleteString(m_list_stack.GetCount()-1);

m_list_info.SetCurSel(m_list_info.GetCount()-1);

else

//如果栈中无括号了,且输入括号为右括号。

m_list_info.SetCurSel(m_list_info.GetCount()-1);

//重画控件

m_list_stack.RedrawWindow();

Sleep(600);

ls.isEmpty())//如果栈中还有左括号,说明右括号的数量小于左括号的数量。

//提示栈中还有未匹配的左括号。

while(ls.index!

=0)//清空栈中的内容

OnButtonClear()

SetWindowText("

//此函数中清空所有编辑框和listbox中的记录

m_list_info.RedrawWindow();

//重画所有的控件

m_list_stack.RedrawWindow();

OnSelchangeListInfo()//此函数响应列表框中光标改变的消息,定位错误的位置。

inti;

i=m_list_info.GetCurSel();

if(i!

=LB_ERR&

i<

m_cstring_input.GetLength())

((CEdit*)GetDlgItem(IDC_EDIT_INPUT))->

//定位错误

((CEdit*)GetDlgItem(IDC_EDIT_INPUT))->

SetSel(i,i+1);

(2)运行截图

图表3运行效果图1

图表4运行效果图2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1