数据结构课程设计魔王语言Word文件下载.docx
- 文档编号:19981089
- 上传时间:2023-01-13
- 格式:DOCX
- 页数:15
- 大小:81.77KB
数据结构课程设计魔王语言Word文件下载.docx
《数据结构课程设计魔王语言Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计魔王语言Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
[6]严蔚敏、吴伟民著,《数据结构习题集》(C语言版),清华大学出版社。
Ⅳ、成绩评定:
设计成绩:
(教师填写)
指导老师:
(签字)
二○○七年七月二十日
目录
第一章概述.............................................1
第二章系统分析.........................................2
第三章系统设计.........................................3
第四章程序设计流程图...................................7
第五章源程序清单.......................................9
第六章调试过程中的问题及系统测试情况...................13
第七章结束语...........................................14
第一章概述
1.1本课程设计意义
课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。
课程设计是让同学们对所学的课程进行更全面的学习和应用,理解和掌握课程的相关知识。
《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。
数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。
第二章系统分析
1.1主要功能:
魔王总是使用自己的一种非常精练而抽象的语言讲话,没人能听懂,但他的语言是可逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的:
-----------------------------------------------------------
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
第三章系统设计
功能模块层次结构图:
数据结构的名称及描述:
(1)栈:
ADTStack{
数据对象:
D={a[i]|a[i]∈Elemset,i=1,2,…,n,n>
=0}
数据关系:
R1={<
a[i-1],a[i]>
|a[i-1],a[i]∈D,i=2,…,n}
约定a[n]端为栈顶,a[1]端为栈底。
基本操作:
Initstack(&
s)
操作结果:
构造一个空栈s。
Destroystack(&
初始条件:
栈s已存在。
栈s被取消。
Clearstack(&
将s清为空栈。
Stackempty(s)
若栈s为空栈,则返回TRUE,否则FALSE。
Stacklength(s)
返回s的元素个数,即栈的长度。
Gettop(s,&
e)
栈s已存在且非空。
用e返回s的栈顶元素。
Push(&
s,e)
插入元素e为新的栈顶元素。
Pop(&
s,&
删除s的栈顶元素,并用e返回其值。
Stacktraverse(s,visit())
栈s已存在且非空
从栈底到栈顶依次对s的每个数据元素调用函数visit()。
一旦visit()失败,则操作失败。
}ADTstack
栈的顺序存储表示:
#defineSTACK_INIT_SIZE100;
//存储空间初始分配量
#defineSTACKINCREMENT10;
//存储空间分配增量
Typedefstruct{
SElemtype*base;
//在栈构造之前和销毁之后,base的值为NULL
SElemtype*top;
//栈顶指针
Intstacksize;
//当前已分配的空间,以元素为单位
}Sqstack;
(2)队列:
ADTqueue{
数据对象:
约定其中a[1]端为队列头,a[n]端为队列尾。
Initqueue(&
q)
操作结果:
构造一个空队列q。
Destroyqueue(&
初始条件:
队列q已存在。
队列q被销毁,不再存在。
Clearqueue(&
将q清空为空队列。
Queueempty(q)
操作结果:
若队列q为空队列,则返回TRUE,否则FALSE。
Queuelength(q)
返回q的元素个数,即队列的长度。
Gethead(q,&
q为非空队列。
用e返回q的队头元素。
Enqueue(&
q,e)
插入元素e作为q的队尾元素。
Dequeue(&
q,&
删除q的队头元素,并用e返回其值。
Queuetraverse(q,visit())
队列q已存在且非空。
从队头到队尾,依次对q的每个数据元素调用函数visit()。
}ADTQueue
队列的链式存储结构:
Typedefstructqnode{
Qelemtypedata;
Structqnode*next;
}qnode,*queueptr;
Typedefstruct{
Queueptrfront;
//对头指针
Queueptrrear;
//队尾指针
}linkqueue;
第四章程序设计流程图
(1)程序开始先由用户输入一种规则使用cin和cout函数。
(2)接着程序再读入想要翻译的魔王语言。
(3)程序对输入的规则进行翻译,翻译成人类语言。
(4)对魔王语言进行翻译,首先用POP()函数把魔王语言每一个字符读出。
(5)再对字符进行筛选,符合输入规则的立即翻译。
保存至transl中。
(6)对于括号中的字符,即人类语言。
先把括号中的字符全部出栈,保存至link中。
(7)按规则把队列中的字符串进行翻译,保存至transl中。
(8)依次执行,直到翻译完所有字符串。
程序设计流程图如下:
第五章源程序清单
程序清单如下:
魔王.cpp
/*-----------------------定义头文件---------------------------*/
#include<
iostream.h>
stdio.h>
string.h>
/*-----------------------定义全局变量-------------------------*/
inttop=0;
intfind=0;
//top=0;
chartransl[200];
charleag[200];
charlink[100];
intrear=1;
//rear=1;
/*-------------------MAIN()主函数---------------------------*/
intmain()
{
charpop();
//定义出栈函数
charml[2][200];
//定义两个规则,把它们存放到ml中
cout<
<
endl;
"
**===魔王语言程序设计===**"
*******************************************************"
**本程序可以翻译魔王语言且按以下两条形式规则由人**"
****"
**的语言逐步抽象上去:
**"
**①α->
β1β2β3β4...**"
**②(θβ1β2β3)->
θβ3θβ2θβ1θ**"
**下面只输入2个第一种形式的规则,且后输入的可以嵌**"
**套已输入的规则。
********************************************************************************"
;
//本程序可以翻译魔王语言且按以下两条形式规则由人的语言逐步抽象上去:
//①α->
β1β2β3β4...
//②(θβ1β2β3)θβ3θβ2θβ1θ
//下面只输入2个第一种形式的规则,且后输入的可以嵌套已输入的规则
//
/*开始输入规则A和B,A比B先输入,再输入B,这样B就可以嵌套A*/
以下请开始翻译:
请先输入一组形式规则:
A->
cin>
>
ml[0];
B->
ml[1];
/*输入魔王语言,其规则为大写为魔王语言,只限定A和B(暂时),小写为人类语言,输入时用括号括起来*/
请输入要解释的魔王语言:
leag;
chartemp[100];
//定义一个缓冲区,存放B的翻译
intsizeA=0;
//定义A的长度
sizeA=strlen(ml[0]);
intwh=0;
//定义缓冲区中的位置变量
for(inti=0;
ml[1][i]!
='
\0'
i++)//开始翻译B
{
if(ml[1][i]=='
A'
)//如果嵌套了A
{
//cout<
hereisdoing!
!
for(intn=0;
n<
sizeA;
n++,wh++)
{
temp[wh]=ml[0][n];
//翻译至缓存区
}
}
else
temp[wh]=ml[1][i];
//如果不是A则原样写入
wh++;
}
temp[wh]=0;
//为缓存区加上结束符
strcpy(ml[1],temp);
//把缓存区中的串给ml[1]
intsizeB=0;
//定义B的长度
sizeB=strlen(ml[1]);
intlength;
length=strlen(leag);
//取得魔王语言的长度
intch;
//定义一个变量保存字符
inta;
intb;
/*-------开始翻译魔王语言,并把结果存至transl中------------*/
for(intt=0;
t<
length;
t++)
ch=pop();
switch(ch)
case'
:
//如果是A的话
for(a=0;
a<
a++,find++)
transl[find]=ml[0][a];
break;
B'
//如果是B的话
for(b=0;
b<
sizeB;
b++,find++)
transl[find]=ml[1][b];
('
//但ch='
时,把括号中的小写字母保存至link中
ch=pop();
link[0]=ch;
//先把第一个字符存入,后面的从link[1]开始
while(ch!
)'
)
ch=pop();
link[rear]=ch;
//记得rear的初值为1
rear++;
//由于while循环的原因,在link队列中多加了一个右括号字符,且rear指针向后多移了2个单位
//故使rear减2
rear=rear-2;
transl[find++]=link[0];
for(rear;
rear!
=0;
rear--)
transl[find++]=link[rear];
transl[find++]=link[0];
//为了使后面的翻译可行话,得把rear还原为初值,即rear=1
rear=1;
default:
break;
}//switch结束
/*--------翻译魔鬼语言结束,结果已存至transl中------------*/
}//for结束
经过翻译,魔王想表达的语言是:
//输出得到的翻译语言
transl;
return0;
}
charpop()//出栈函数的实现
returnleag[top++];
第六章调试过程中的问题及系统测试情况
输入输出:
*输入注意:
先输入的规则可以被后输入的规则嵌套,后输入的可以嵌套先输入的,但是注意先输入的不可以嵌套后输入的。
输入魔王语言时,人类语言(小写字符)要用括号括起来,魔王字符(大写字符)只能是以上规则提到的字符。
输入例子:
yui回车
tuAsdA回车
魔王语言:
BABA(fqwerjijilo)ABAB
输出结果:
翻译输出:
结果正确。
第七章结束语
经过几天和同学进行的程序设计合作,使我明白了做一件事情如果靠团结的力量是很容易完成的。
再次感谢指导我们的老师,给了我们莫大的帮忙,使我们的工作事半功倍。
本次任务完成情况良好,能够完好的解决题目所给的要求,达到了程序设计的输入、输出、有穷性、可行性、确定性的程序要求。
参考文献:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 魔王 语言
![提示](https://static.bdocx.com/images/bang_tan.gif)