括号匹配的检查_课程设计.doc_第1页
括号匹配的检查_课程设计.doc_第2页
括号匹配的检查_课程设计.doc_第3页
括号匹配的检查_课程设计.doc_第4页
括号匹配的检查_课程设计.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

衡阳师范学院 C语言 数据结构课程设计报告题 目: 括号匹配的检验 班 级: 1 1 0 1 学 号: 作者姓名: 指导教师: 2012年11月12目 录1设计题目与要求31.1实验目的31.2问题描述31.3设计要求32总体设计思想及相关知识32.1总体设计思想3 2.2开发环境与工具. 43功能设计43.1 抽象数据类型的定义43.2 栈的基本运算.43.3栈的基本操作的实现.43.4模块流程图64源程序代码65测试及结果96总结117小组成员任务分配11参考文献121设计题目与要求1.1实验目的通过对括号匹配的检验的程序设计编写,深入了解和掌握栈的使用,了解栈先进后出的特点,掌握栈的表示和实现。1.2问题描述 假设表达式中允许包括两种括号:圆括号和方括号,其嵌套的顺序随意,即()或()等为正确的格式,()或())均为不正确的格式。检验括号是否匹配的方法可用“期待的急迫程度”这个概念来描述。例如考虑下列括号序列: ( ) 1 2 3 4 5 6 7 8 当计算机接受了第一个括号后,它期待着与其匹配的第八个括号的出现,然而等来的却是第二个括号,此时第一个括号只能暂时靠边,而迫切等待与第二个括号相匹配的,第七个括号的出现,类似的,因等来的第三个括号,其期待的匹配程度较第二个括号更急迫,则第二个括号也只能靠边,让位于第三个括号,显然第二个括号的期待急迫性高于第一个括号;在接受了第四个括号后,第三个括号的期待得到满足,消解之后,第二个括号的期待匹配成了当前最急迫的任务了,依次类推。可见,这个处理过程恰与栈的特点相吻合。1.3设计要求读入圆括号和方括号的任意序列,输出“匹配”或“此串括号匹配不合法”。2总体设计思想及相关知识2.1总体设计思想最内层(最迟出现)的左括号必须与最内层(最早出现)的同类右括号匹配,它最期待着急迫的配对。配对之后,期待得以消除。因此为左括号设置一个栈,置于栈顶的左括号期待配对的急切程度最高。另外,在算法的开始和结束时,栈都应该是空的。例如:()、 () 、(2.2开发环境与工具系统平台:Windows应用程序实现语言:C语言开发工具:VC+6.03功能设计3.1抽象数据类型的定义 堆栈的定义:栈(Stack)是限定只能在表的一端进行插入和删除操作的线性表。在表中,允许插入和删除的一端称作栈顶(top),不允许插入和删除的另一端称作栈底(bottom) 。3.2栈的基本运算(1)栈初始化:Init_Stack(s)。操作结果是构造了一个空栈。(2)判栈空:Empty_Stack(s)。操作结果是若s为空返回1,否则返回为0.(3)入栈:Push_Stack(s,x)。操作结果是在栈s的顶部插入一个新的元素x,x成为新的栈顶元素,栈发生变化。(4)出栈:Pop_Stack(s)。在栈s存在且非空的情况下,操作结果是将栈s的顶部元素从栈中删除,栈中少了一个元素,栈发生变化。(5)读栈顶元素:Top_Stack(s)。在栈s存在且非空的情况下,操作结果是读栈顶元素,栈不变化。3.3栈的基本操作的实现(1)置空栈(首先建立栈空间,然后初始化栈顶指针)SeqStack * Init_Stack()SeqStack *s;s=( SeqStack *)malloc(sizeof(SeqStack );s-top=-1;return s; (2)判空栈int Empty_Stack(SeqStack *s)If(s-top=-1) return 1;Else return 0;(3)入栈int Push_Stack(SeqStack *s,datatype x)if(s-top=MAXSIZE-1) return 0; /栈满不能入栈elses-top+;s-datas-top=x;return 1;(4)出栈int Pop_Stack(SeqStack *s,datatype *x)if (Empty_Stack(s) return 0; /栈空不能出栈else *x=s-datas-top; /栈顶元素存入*x,返回s-top-;return 1;(5)取栈顶元素datatype Top_Stack(SeqStack *s)if (Empty_Stack(s) return 0; /栈空else return(s-datas-top);3.4模块流程开 始 输入括号序列输 出输 出判断括号是否匹配4.源程序代码#include#include#define MAXSIZE 100typedef char datatype;struct SeqStackdatatype dataMAXSIZE;int top;SeqStack * Init_Stack()SeqStack *s;s=( SeqStack *)malloc(sizeof(SeqStack );s-top=-1;return s;int Empty_Stack(SeqStack *s)if(s-top=-1) return 1;else return 0;int Push_Stack(SeqStack *s,datatype x)if(s-top=MAXSIZE-1) return 0; /栈满不能入栈elses-top+;s-datas-top=x;return 1;int Pop_Stack(SeqStack *s,datatype *x)if (Empty_Stack(s) return 0; /栈空不能出栈else *x=s-datas-top; /栈顶元素存入*x,返回s-top-;return 1;datatype Top_Stack(SeqStack *s)if (Empty_Stack(s) return 0; /栈空else return(s-datas-top);int match(char s)SeqStack *st;datatype x;char *p=s;st=Init_Stack();while(*p)switch(*p)case (:case :case :Push_Stack(st,*p);break;case ):if(Top_Stack(st)=() Pop_Stack(st,&x);else return 0;break;case :if(Top_Stack(st)=) Pop_Stack(st,&x);else return 0;break;case :if(Top_Stack(st)=) Pop_Stack(st,&x);else return 0;break;default:return 0;break;p+;return Empty_Stack(st)?1:0;int main()printf(请输入一组或多组括号序列,按enter键结束输入:n);char sMAXSIZE;while(gets(s)printf(match(s)?括号匹配n:括号不匹配n);return 0;5 测试及结果 图5-1 图5-2 图5-3 图5-46 总结经过了两周的时间,我们完成了这个课程设计。通过这次课程设计,我们学到了很多关于数据结构中栈的使用操作。经过这些天的上机操作,我们也意识到了自己的不足之处,例如容易把符号打错,在查找错误时难以发现等问题。在这程序设计中遇到的问题,一般上网查询或者问上一届的同学,参考他人的做法,多次操作失败过,但还是一步步改正。 所以说,这次的课程设计给了我们一个提高,过程中发现对C语言还是不太熟悉,数据结构很重要,多实践操作很关键。在以后的计算机学习过程中,理解理论知识,注重实践操作。小组成员任务分配 程序编程前阶段:全组成

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论