课程设计报告——括号匹配问题

课程设计报告——括号匹配问题
课程设计报告——括号匹配问题

课程设计报告——括号匹配问题

————————————————————————————————作者:————————————————————————————————日期:

?

1. 设计目的

1、能根据实际问题的具体情况,结合数据结构课程中的基本理论和基本算法,分析并正确确定数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法。

2、提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。

3、初步掌握软件开发过程中问题分析、系统设计、程序编码、测试等基本方法和技能。

4、训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

5、培养根据选题需要选择学习书籍,查阅文献资料的自学能力。

2.设计内容

2.1 系统名称

括号匹配问题:括号匹配问题就是给定任意判别式,然后检验括号的配对出现的情况。

2.2要求

假设一个算术表达式中可包含三种括号:圆括号、中括号、花括号且这三种括号可按任意次序嵌套使用。试利用栈的运算,编写判别给定式中所含括号是否正确配对出现的算法。

任意运用一种计算机语言,分析问题,写出具体程序,要求能够在对应的系统中实现该问题的,实验通过计算机来完成。

独立完成,可通过查阅资料来解决自己不会的问题,提高自己查阅文献的能力级独立思考的能力。

3.程序设计步骤

3.1 程序流程分析图

图3-1 程序流程图

3.2 主要的数据结构类型

typed ef st ruc t {

? int top;

ch ar S zstack[Max Siz e]; }Text;

开给定判断

检验

左右入找栈

配对删除不配对,则栈空

栈不

3.3 程序功能模块函数

(1)检验栈是否为空

boolIsEmpty(TextG)

{

?if(G.top==-1)

??returntrue;

else

??return false;

}

(2) 检验栈是否为满

bool IsFull(Text G)

{

?if(G.top==MaxSize-1)

??return true;

else

?returnfalse;

}

(3) 弹出栈顶元素

charPop(Text G)

{

?char n=G.Szstack[G.top];

?return n;

}

(4)检验括号是否配对

int Check(char *A)

{

?int i;

Text G;

?G.top=-1;

?intL=strlen(A);

?charc;

?for(i=0;i<L;i++)

{

??c=A[i];

switch(c)

{

?case'(':

????G.Szstack[++(G.top)]=c;

??printf(" 压入(top=%d \n\n",G.top);

??break;

case'[':

??G.Szstack[++(G.top)]=c;

??printf("压入[top=%d \n\n",G.top);

??break;

?case'{':

?G.Szstack[++(G.top)]=c;

???printf(" 压入{ top=%d \n\n",G.top);

?break;

?case')':

???if(Pop(G)!='(')

??{

?return0;

???}

?else

?{

?G.Szstack[G.top--];

??printf(" 当遇)出栈( top=%d\n\n",G.top);

??break;

?}

case']':

if(Pop(G)!='[')

return0;

???else

???{

???G.Szstack[G.top--];

printf(" 当遇] 出栈[ top=%d\n\n",G.top);

???break;

????}

case'}':

??if(Pop(G)!='{')

?return 0;

???else

?{

???G.Szstack[G.top--];

??printf(" 当遇} 出栈{ top=%d\n\n",G.top);

?break;

}

?default:break;

?}

}

if(!IsEmpty(G))

?return 0;?

return 1;

}

3.4程序实现中函数之间的调用

先进行函数声明,在定义函数,再在功能函数及主函数中调用函数,实现检验括号匹配的问题。

主函数:

intmain()

{

TextG;

system("color1f");

?char A[MaxSize];

printf("请输入需要检验的括号:\n\n");

?scanf("%s",A);

?if(Check(A)==1)

?{

?printf("-----括号匹配-----\n\n\n");

?}

else

?printf("\n\n\n");

?printf(" -----括号不匹配-----\n\n\n");

?}

return 0;

}

4.调试分析

输入检验的表达式中的括号是否匹配,将进栈出栈过程在调试中显示出来,方便观察。现在输入各种表达式及括号,都能正确判别其中括号是否匹配。

主要是通过栈来实现检验功能,栈在很多方面都可以用到的,用途广泛。5.测试结果

进入演示程序后,即显示主界面为:

图5-1主界面

输入判别式,界面显示结果为:

匹配情况:

图5-2括号匹配图

?图5-3 括号匹配图

不匹配的情况:

图5-4 括号不匹配图

图5-5括号不匹配图

6.课程设计小结

这次课程设计是运用C语言以及这学期所学习的数据结构的知识完成的。数据结构是由某一数据元素的集合和该集合中的数据元素之间的关系组成。当拿到一个问题时,首先要分析问题,确定算法遇到的资源限制;然后确定必须支持的基本运算,度量每个运算所受到的资源限制。基本运算包括向数据结构插入一个新数据项,从数据结构中删除一个数据项和搜索指定的数据项;最后选择最接近这些资源开销的数据结构。然后运用所学的语言将算法思想通过程序表现出来,最后解决一个问题。

本实验,我做的是检验括号匹配的问题。首先分析问题,理解题目意思。想出具体解决该问题的算法。通过栈的思想来解决问题。此次实验遇到困难不多,算法比较简单。通过一个数组和一个栈就可以解决问题了。只是在刚开始时,直接把判别式读入栈中,导致调试出现错误,一时无法解决,通过多次调试检查得以解决。还有在该程序中遇到的问题是,将遇到的左括号压入栈中时,调用Push ()函数时,它的顶部top值不变,还不清楚为什么,所以此程序没有写Push()函数,直接在检验函数中将括号压入栈中。

通过此次实验,也了解到自己的语言知识还很匮乏,缺乏独立设计程序的能力,容易产生思维定式。在今后,一定要把语言学好,基础打牢,多进行实践,独立思考,取得进步。

相关主题
相关文档
最新文档