括号匹配问题Word格式.docx
《括号匹配问题Word格式.docx》由会员分享,可在线阅读,更多相关《括号匹配问题Word格式.docx(9页珍藏版)》请在冰豆网上搜索。
实现本程序需要解决:
①用什么数据结构;
②怎样实现判断括号是否匹配;
③括号匹配与否有几种情况;
④输出与输入数据的形式。
本程序的难点在于怎么判断括号是否匹配。
2.概要设计
2-1模块一:
初始化一个堆栈
堆栈的顺序存储结构可以利用一个具有M个元素的数组STACK[0..M-1]来描述。
其中,STACK作为堆栈的名字,且不妨设:
#defineM100*/定义堆栈的最大容量,并初始化栈顶指针变量top=-1。
2-2模块二:
进栈
在容量为M的堆栈中插入一个新的元素E[i],栈顶元素的位置由top指出。
新的数据元素进栈,将栈顶指针加1,然后将新的数据元素E[i]插入到修改以后的top指出的新的栈顶位置上。
2-3模块三:
测试堆栈是否为空
测试堆栈是的栈顶指针top是否为-1。
2-4模块四:
退栈
从堆栈中退出当前栈顶元素,并保存在变量item中,同时将栈顶指针减1修改栈顶指针位置。
2-5模块五:
各模块间的调用关系
首先创建一个堆栈并初始化,依次读入字符直到文件的末尾。
如果读得的字符为左括号,则将其压入堆栈。
如果读得的字符是右括号,而此时堆栈为空,进栈,则出现不匹配现象,报告错误;
否则,退出当前栈顶元素。
如果退出的栈顶符号不是对应的左括号,则出现不匹配,报告错误。
读到文件末尾,若堆栈非空,则报告错误。
3.算法描述
3-1程序流程图:
3-2程序代码:
#include"
stdio.h"
typedefintSElemType;
#defineM100/*定义堆栈的最大容量*/
SElemTypeSTACK[M];
inttop;
/*栈顶指针变量*/
intPAIRBRACKET(charE[])
{
SElemTypeSTACK[M];
charitem;
inti=0,top=-1;
/*初始化一个堆栈*/
while(E[i]!
='
\0'
){
if(E[i]=='
('
||E[i]=='
['
{'
)
STACK[++top]=E[i];
/*进栈*/
)'
if(top==-1){/*测试堆栈是否为空*/
printf("
mismatching!
"
);
return0;
}
item=STACK[top--];
/*退栈*/
if(item!
=E[i]-1){
}
elseif(E[i]=='
]'
}'
=E[i]-2){
i++;
}
if(top==-1)
printf("
matching!
\n"
else
return1;
}
voidmain()
chars[M]={0};
printf("
Pleaseentertheparenthesesarithmeticexpression:
scanf("
%s"
s);
PAIRBRACKET(s);
4.算法分析
首先创建一个堆栈
#defineM100
并初始化
top=-1
依次读入输入的表达式字符直到E[i]=’\0’结束。
while(E[i]!
return0;
if(top==-1)
时间、空间性能分析:
本算法采用的是顺序栈结构,定义了一个长100的字符型数组,时间主要花在表达式中括号的读取中,时间的多少取决于该表达式中括号的多少,总的来说时间性能还是不高的,而空间爱你性能则不错,与链栈相比节省很多空间。
所以本程序时间、空间性能不错。
5.心得体会
通过这次的数据结构课程设计实验周,我进一步理解了顺序堆栈的构造极其逻辑结构定义,并一定程度上掌握顺序堆栈的基本操作算法。
书本上对顺序堆栈的基本算法介绍的比较详尽,但由于我对这方面的知识了解真的不深,而且之前C语言的基础没有打好,程序设计过程中遇到不少难题,通过和直到老师、同学们的沟通,并上网查了些资料,问题终于得到一定程度上的解决。
这个程序中不足的地方在于由于堆栈是一个动态结构,而数组是一个静态结构,故利用静态结构的数组描述一个动态结构的堆栈,还存在溢出问题。
然而程序中只考虑到对空栈进行删除操作会产生的下溢问题,而忽略了对栈中已有M个元素时再做进栈操作会产生的上溢问题。
这一次程序设计实验周中我受益匪浅,既复习并熟悉了数组方面的知识,又掌握到了顺序堆栈的基本算法。
所学到的知识得到了很好的复习并巩固。
我认识到数据结构是实践很强的一门课程,光是“听”和“读”是绝对不够的,必须加强实践。
在写算法的过程中,出现过很多问题,然而在不断修改的过程中便是我学习的过程。
在这个过程中,只要全身心的投入了,便会发现很多乐趣。
6.参考资料
唐发根数据机构教程(第二版)北京航空航天大学出版社
东华理工学院长江学院
课程设计评分表
学生姓名:
班级:
学号:
课程设计题目:
项目内容
满分
实评
选
题
能结合所学课程知识、有一定的能力训练。
符合选题要求
(5人一题)
10
工作量适中,难易度合理
能
力
水
平
能熟练应用所学知识,有一定查阅文献及运用文献资料能力
理论依据充分,数据准确,公式推导正确
能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等
能体现创造性思维,或有独特见解
成
果
质
量
总体设计正确、合理,各项技术指标符合要求。
说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;
分析处理科学、条理分明、语言流畅、结构严谨、版面清晰
设计说明书栏目齐全、合理,符号统一、编号齐全。
格式、绘图、表格、插图等规范准确,符合国家标准
有一定篇幅,字符数不少于5000
总分
100
指导教师
指导教师签名:
年月日