括号匹配的检验.docx

上传人:b****5 文档编号:29857717 上传时间:2023-07-27 格式:DOCX 页数:12 大小:54.02KB
下载 相关 举报
括号匹配的检验.docx_第1页
第1页 / 共12页
括号匹配的检验.docx_第2页
第2页 / 共12页
括号匹配的检验.docx_第3页
第3页 / 共12页
括号匹配的检验.docx_第4页
第4页 / 共12页
括号匹配的检验.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

括号匹配的检验.docx

《括号匹配的检验.docx》由会员分享,可在线阅读,更多相关《括号匹配的检验.docx(12页珍藏版)》请在冰豆网上搜索。

括号匹配的检验.docx

括号匹配的检验

湖南工学院

计算机与信息科学系

 

课程设计报告

2010—2010学年第一学期

 

课程名称——数据结构

设计题目——括号匹配的检验

姓名——

专业班级—2

学号——

 

2010年12月31日

 

目录

 

1设计任务书………………………………

1.1题目与要求………………………………………………

1.2设计中涉及的知识点……………………………………

2功能设计…………………………………

2.1抽象数据类型的定义………………………………………

2.2模块流程图………………………………………………

3程序代码设计与说明……………………

3.1子程序设计与其功能……………………………………

3.2主函数设计与其功能……………………………………

4程序设计总结……………………………

4.1程序调试情况……………………………………………

4.2个人经验及体会…………………………………………

5用户使用说明……………………………

6测试结果…………………………………

7附录(源程序)…………………………

 

1设计任务书

1.1题目与要求

[问题描述]

  假设表达式中允许有两种括号:

圆括号和方括号,其嵌套的顺序随意,即(()[])或

[([][])]等为正确格式,[(])或(((]均为不正确的格式。

检验括号是否匹配的方法可用

“期待的紧迫程度”这个概念来描述。

例如:

考虑下列的括号序列:

  [ ( [ ] [ ] ) ]

  1 2 3 4 5 6 7 8

  当计算机接受了第1个括号以后,他期待着与其匹配的第8个括号的出现,然而等来的却是第2个

括号,此时第1个括号“[”只能暂时靠边,而迫切等待与第2个括号相匹配的第7个括号“)”的出现,类似的,因只等来了第3个括号“[”,此时,其期待的紧迫程度较第2个括号更紧迫,则第2个括号只能靠边,让位于第3个括号,显然第3个括号的期待紧迫程度高于第2个括号,而第2个括号的期待紧迫程度高于第1个括号;在接受了第4个括号之后,第3个括号的期待得到了满足,消解之后,第2个括号的期待匹配就成了最急迫的任务了,……,依次类推。

可见这个处理过程正好和栈的特点相吻合。

[基本要求]

读入圆括号和方括号的任意序列,输出“匹配”或“此串括号匹配不合法”。

1.2设计中涉及的知识点

编译预处理(文件包含)、选择结构、循环结构、堆栈、函数

2功能设计

2.1抽象数据类型的定义

包括堆栈的定义

2.2模块流程图

3程序代码设计

3.1子程序设计及其功能

(1)函数原型:

Stackinitiate(Seqstack*S)

功能:

初始化堆栈

代码:

voidStackinitiate(Seqstack*S)

{

S->top=0;

}

(2)函数原型:

Stacknotempty(SeqstackS)

功能:

判断堆栈是否为空

代码:

intStacknotempty(SeqstackS)

{

if(S.top<=0)return0;

elsereturn1;

}

(3)函数原型:

Stackpush(Seqstack*S,Datatypex)

功能:

数据元素入栈

代码:

intStackpush(seqstack*S,Datatypex)

{

if(S->top>=Maxstack)

{

printf("堆栈已满无法插入!

\n");

return0;

}

else

{

S->stack[S->top]=x;

S->top++;

return1;

}

}

(4)函数原型:

Stackpop(Seqstack*S,Datatype*d)

功能:

堆栈中数据元素出栈

代码:

intStackpop(Seqstack*S,Datatype*d)

{

if(S->top<=0)

{

printf("堆栈已空无数据元素出栈!

\n");

return0;

}

else

{

S->top--;

*d=S->stack[S->top];

return1;

}

}

(5)函数原型:

Stacktop(SeqstackS,Datatype*d)

功能:

取堆栈中栈顶元素

代码:

intStacktop(SeqstackS,Datatype*d)

{

if(S.top<=0)

{

printf("堆栈已空!

\n");

return0;

}

else

{

*d=S.stack[S.top-1];

return1;

}

}

3.2主函数设计及其功能

代码:

voidmain()

{

charstr[Maxstack];

printf("请输入要匹配的括号的序列:

\n");

gets(str);

voidExpiscorrect(str);

}

功能:

输入一组括号的序列,可检验括号是否匹配正确。

4程序设计总结

4.1程序调试情况

出现了很多的小错误,咧如:

missing';'、syntaxerror:

')'在调用函数的时候用了黏贴和复杂加了一下无效的字符,定义符号也加了进去,还有大小写的一些错误。

4.2个人经验及体会

经过一个星期的上机实践学习,使我对c语言和数据结构有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对c语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对c语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。

通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习c语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。

5用户使用说明

步骤:

输入你想匹配的括号的序列,再按回车键。

会出现‘匹配!

’和‘此串括号匹配不合法!

’两种结果。

6测试结果

 

7附录(源程序)

#include"string.h"

#include"stdio.h"

#defineMaxstack100

typedefcharDataType;

//#include"SeqStack.h"

typedefstruct

{

DataTypestack[Maxstack];

inttop;

}Seqstack;/*定义结构体*/

voidStackinitiate(Seqstack*S)/*初始化*/

{

S->top=0;

}

intStacknotempty(SeqstackS)/*判断非空否*/

{

if(S.top<=0)return0;

elsereturn1;

}

intStackpush(Seqstack*S,DataTypex)/*入栈*/

{

if(S->top>=Maxstack)

{

printf("堆栈已满无法插入!

\n");

return0;

}

else

{

S->stack[S->top]=x;

S->top++;

return1;

}

}

intStackpop(Seqstack*S,DataType*d)/*出栈*/

{

if(S->top<=0)

{

printf("堆栈已空无数据元素出栈!

\n");

return0;

}

else

{

S->top--;

*d=S->stack[S->top];

return1;

}

}

intStacktop(SeqstackS,DataType*d)

{

if(S.top<=0)

{

printf("堆栈已空!

\n");

return0;

}

else

{

*d=S.stack[S.top-1];

return1;

}

}

voidExpiscorrect(charexp[Maxstack])/*判断有n个字符的的字符串exp左、右括号是否配对正确*/

{

Seqstackmystack;

inti;

charc;

Stackinitiate(&mystack);

for(i=0;exp[i]!

='\0';i++)

{

if((exp[i]=='(')||(exp[i]=='['))

Stackpush(&mystack,exp[i]);/*入栈*/

elseif(exp[i]==')'&&Stacknotempty(mystack)&&Stacktop(mystack,&c)

&&c=='(')

Stackpop(&mystack,&c);

elseif(exp[i]==')'&&Stacknotempty(mystack)&&Stacktop(mystack,&c)

&&c!

='(')

{

printf("此串括号匹配不合法!

\n");

return;

}

elseif(exp[i]==']'&&Stacknotempty(mystack)&&Stacktop(mystack,&c)

&&c=='[')

Stackpop(&mystack,&c);

elseif(exp[i]==']'&&Stacknotempty(mystack)&&Stacktop(mystack,&c)

&&c!

='[')

{

printf("此串括号匹配不合法!

\n");

return;

}

elseif((exp[i]==')')||(exp[i]==']')&&!

Stacknotempty(mystack))

{

printf("此串括号匹配不合法!

\n");

return;

}

}

if(Stacknotempty(mystack))

printf("此串括号匹配不合法!

\n");

else

printf("匹配!

\n");

}

voidmain()

{

charstr[Maxstack];

printf("请输入要匹配的括号的序列:

\n");

gets(str);

Expiscorrect(str);

}

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

当前位置:首页 > PPT模板 > 其它模板

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

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