数据结构课程设计魔王语言解释_第1页
数据结构课程设计魔王语言解释_第2页
数据结构课程设计魔王语言解释_第3页
数据结构课程设计魔王语言解释_第4页
数据结构课程设计魔王语言解释_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、山东理工大学计算机学院课 程 设 计(数据结构)班 级姓 名学 号指导教师二七 年 七 月 二十 日课程设计任务书及成绩评定课题名称魔王语言解释、题目的目的和要求: 设计中要求综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题。通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握数据结构和算法设计技术,掌握分析、解决实际问题的能力。通过这次设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。、设计进度及完成情况日 期内

2、容7.2-7.4熟悉设计任务,查阅有关文献资料,确定所采用的数据结构,初步制定解决问题的方法,完成课程设计说明书内容1-3部分。7.57.10选择合适的存储结构,明确解决问题的算法,上机编写并调试源程序。7.117.12整体调试程序并记录调试中的问题,完成课程设计说明书第4-7部分。7.13演示设计成果,考核成绩。整理课程设计说明书,上午11时,由学习委员交课程设计说明书(计算机科学系9#213或直接交给指导教师)、主要参考文献及资料1 严蔚敏、吴伟民主编,数据结构(c语言版),清华大学出版社,2002。2 殷人昆等著,数据结构(c+版),清华大学出版社,2001。3 金远平著,数据结构(c+

3、描述),清华大学出版社,2005。4 许卓群等著,数据结构与算法,高等教育出版社,2004。5 frank m.carrano等著,数据结构与+高级教程,清华大学出版社,2004。6 严蔚敏、吴伟民著,数据结构习题集(c语言版),清华大学出版社。、成绩评定:设计成绩: (教师填写)指导老师: (签字)二七年七月二十日目 录第一章 概述.1第二章 系统分析.2第三章 系统设计.3第四章 程序设计流程图.7第五章 源程序清单.9第六章 调试过程中的问题及系统测试情况.13第七章 结束语.14第一章 概述1.1本课程设计意义 课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相

4、关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学们对所学的课程进行更全面的学习和应用,理解和掌握课程的相关知识。数据结构是一门重要的专业基础课,是计算机理论和应用的核心基础课程。数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。第二章 系统分析1.1主要功能:魔王总是使用自己的一种非常精练而抽象的语言讲话,没人能听懂,但他的语言是可逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的:

5、- 1)a- (b1)(b2).(bm) 2)(op1)(p2).(pn)-o(pn)o(p(n-1).o(p1)o -在这两种形式中,从左到右均表示解释.试写一个魔王语言的解释系统,把他的话解释成人能听得懂的话. 1.2基本要求: 用下述两条具体规则和上述规则形式(2)实现.设大写字母表示魔王语言的词汇;小写字母表示人的语言的词汇;希腊字母表示可以用大写字母或小写字母代换的变量.魔王语言可含人的词汇. 1) b - tada 2) a - sae第三章 系统设计功能模块层次结构图:调用link()把括号中的字符全部进队列,按规则翻译按规则进行翻译根据用pop()出栈的字符进行判断:a:大写字

6、符b:左括号输入魔王语言输入一组规则调用gzcin()输入规则调用mycin()输入语言调用change()进行翻译在屏幕输出数据结构的名称及描述:(1)栈:adt stack数据对象:d=ai|ai elemset,i=1,2,n, n=0数据关系:r1=|ai-1,ai d,i=2,n 约定an端为栈顶,a1端为栈底。基本操作: initstack(&s)操作结果:构造一个空栈s。 destroystack(&s)初始条件:栈s已存在。操作结果:栈s被取消。 clearstack(&s)初始条件:栈s已存在。操作结果:将s清为空栈。 stackempty(s)初始条件:栈s已存在。操作结果

7、:若栈s为空栈,则返回true,否则false。 stacklength(s)初始条件:栈s已存在。操作结果:返回s的元素个数,即栈的长度。 gettop(s,&e)初始条件:栈s已存在且非空。操作结果:用e返回s的栈顶元素。 push(&s,e)初始条件:栈s已存在。操作结果:插入元素e为新的栈顶元素。 pop(&s,&e)初始条件:栈s已存在且非空。操作结果:删除s的栈顶元素,并用e返回其值。 stacktraverse(s,visit()初始条件:栈s已存在且非空操作结果:从栈底到栈顶依次对s的每个数据元素调用函数visit()。一旦visit()失败,则操作失败。adt stack栈的

8、顺序存储表示:#define stack_init_size 100; /存储空间初始分配量#define stackincrement 10; /存储空间分配增量typedef struct selemtype *base; /在栈构造之前和销毁之后,base的值为null selemtype *top; /栈顶指针 int stacksize; /当前已分配的空间,以元素为单位sqstack;(2)队列:adt queue数据对象:d=ai|ai elemset,i=1,2,n, n=0数据关系:r1=|ai-1,ai d,i=2,n 约定其中a1端为队列头,an端为队列尾。基本操作:in

9、itqueue(&q) 操作结果:构造一个空队列q。destroyqueue(&q) 初始条件:队列q已存在。 操作结果:队列q被销毁,不再存在。clearqueue(&q) 初始条件:队列q已存在。 操作结果:将q清空为空队列。queueempty(q) 初始条件:队列q已存在。 操作结果:若队列q为空队列,则返回true,否则false。queuelength(q) 初始条件:队列q已存在。 操作结果: 返回q的元素个数,即队列的长度。gethead(q,&e) 初始条件:q为非空队列。 操作结果: 用e返回q的队头元素。enqueue(&q,e) 初始条件:队列q已存在。 插入元素e作为

10、q的队尾元素。dequeue(&q,&e) 初始条件:q为非空队列。 操作结果: 删除q的队头元素,并用e返回其值。queuetraverse(q,visit() 初始条件:队列q已存在且非空。 操作结果: 从队头到队尾,依次对q的每个数据元素调用函数visit()。一旦visit()失败,则操作失败。adt queue队列的链式存储结构:typedef struct qnode qelemtype data; struct qnode *next;qnode,*queueptr;typedef struct queueptr front; /对头指针 queueptr rear; /队尾指针

11、linkqueue; 第四章 程序设计流程图(1)程序开始先由用户输入一种规则使用cin和cout函数。(2)接着程序再读入想要翻译的魔王语言。(3)程序对输入的规则进行翻译,翻译成人类语言。(4)对魔王语言进行翻译,首先用pop()函数把魔王语言每一个字符读出。(5)再对字符进行筛选,符合输入规则的立即翻译。保存至transl中。(6)对于括号中的字符,即人类语言。先把括号中的字符全部出栈,保存至link中。(7)按规则把队列中的字符串进行翻译,保存至transl中。(8)依次执行,直到翻译完所有字符串。程序设计流程图如下:第五章 源程序清单程序清单如下:魔王.cpp/*-定义头文件-*/#

12、include#include#include/*-定义全局变量-*/int top=0;int find=0;/top=0;char transl200;char leag200;char link100;int rear=1;/rear=1;/*-main()主函数-*/int main()char pop(); /定义出栈函数char ml2200; /定义两个规则,把它们存放到ml中coutendl;cout * 魔王语言程序设计 * endl;cout * endl;cout * endl;cout * 本程序可以翻译魔王语言且按以下两条形式规则由人 * endl;cout * *

13、endl;cout *的语言逐步抽象上去: * endl;cout * * endl;cout1234. * endl;cout * * endl;cout321 * endl;cout * * endl;cout * 下面只输入2个第一种形式的规则,且后输入的可以嵌* endl;cout * * endl;cout *套已输入的规则。 * endl;cout * * endl;cout * endl;cout * endl;cout1234. / (123)321 /下面只输入2个第一种形式的规则,且后输入的可以嵌套已输入的规则 /*开始输入规则a和b,a比b先输入,再输入b,这样b就可以嵌

14、套a*/cout以下请开始翻译:endl;cout请先输入一组形式规则:endl; cout;cinml0;cout;cinml1;coutendl;/*输入魔王语言,其规则为大写为魔王语言,只限定a和b(暂时),小写为人类语言,输入时用括号括起来*/ coutleag;char temp100; /定义一个缓冲区,存放b的翻译int sizea=0; /定义a的长度 sizea=strlen(ml0); int wh=0; /定义缓冲区中的位置变量for(int i=0;ml1i!=0;i+) /开始翻译bif(ml1i=a) /如果嵌套了a/couthere is doing!;for(i

15、nt n=0;nsizea;n+,wh+)tempwh=ml0n; /翻译至缓存区elsetempwh=ml1i; /如果不是a则原样写入wh+;tempwh=0; /为缓存区加上结束符strcpy(ml1,temp); /把缓存区中的串给ml1int sizeb=0; /定义b的长度 sizeb=strlen(ml1);int length;length=strlen(leag); /取得魔王语言的长度int ch; /定义一个变量保存字符int a;int b;/*-开始翻译魔王语言,并把结果存至transl中-*/for(int t=0;tlength;t+) ch=pop(); swi

16、tch(ch)case a: /如果是a的话for(a=0;asizea;a+,find+)translfind=ml0a;break; case b: /如果是b的话 for(b=0;bsizeb;b+,find+)translfind=ml1b;break; case (: /但ch=(时,把括号中的小写字母保存至link中ch=pop();link0=ch; /先把第一个字符存入,后面的从link1开始while(ch!=) ch=pop();linkrear=ch; /记得rear的初值为1rear+; /由于while循环的原因,在link队列中多加了一个右括号字符,且rear指针向

17、后多移了2个单位 /故使rear减2rear=rear-2; translfind+=link0;for(rear;rear!=0;rear-)translfind+=linkrear; translfind+=link0; /为了使后面的翻译可行话,得把rear还原为初值,即rear=1rear=1;break; default:break;/switch结束/*-翻译魔鬼语言结束,结果已存至transl中-*/for结束cout经过翻译,魔王想表达的语言是:; /输出得到的翻译语言 coutendl;couttransl;coutyui回车b-tuasda回车魔王语言:baba(fqwerjijilo)abab输出结果:翻译输出:结果正确。第七章 结束语经过几天和同学进行的程序设计合作,使我明白了做一件事情如果靠团结的力量是很容易完成的。再次感谢指导我们的老师,给了我们莫大的帮忙,使我们的

温馨提示

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

评论

0/150

提交评论