- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程设计魔王语言解释 .doc
实习2、魔王语言解释
需求分析
问题描述
有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没人能听的懂,但他的 语言是可以逐步解释成人能懂得语言的,因为他的语言是由以下两种形式的规则由人的语 言逐步抽象上去的:
a-3 1 132 ... Pn
⑵(()6 1 62 ... 6n) —0 8n 0 6 n~l ... 0 8 1 0
在这两种形式中,从左到右均表示解释。试写一个魔王解释系统,把他的话解释成人 能听懂得话。
基本要求
用下述两条具体规则和上述规则形式(2)实现。设大写字母表示魔王语言的词汇;小 写字母表示人的语言同汇;希腊字母表示可以用大写或小写字母代换的变量。魔王语言可 含人的词汇。
(1) B—〉tAdA
A 一sae
测试数据
B (ehnxg z) B 角军释成 tsa edsaeezege xenehetsae dsae
若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是“天上一个鹅地上一 个鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一个鹅地上一个鹅”。
实现提示
将魔王的语言自右至左进栈,总是处理桟顶字符。若是开括号,则逐一出栈,将字母 顺序入队列,直至闭括号出栈,并按规则要求逐一出队列再处理后入栈。其他情形较简单, 请读者思考如何处理。应首先实现找和队列的基本操作。
概要设计
1. 设定栈的抽象数据类型定义:
ADT Stack {
数据对象:D={a j| aj^Char Set, i= 1,2, n” n^O }
数据关系:Rl={ Om ,ai | a i.i/aieDzaj.iaj/i =1,2 ,n}
基本操作:
lnitStack(*S)
操作结果:构造一个空栈。
Push(*S ze)
初始条件:栈S已存在 操作结果:在栈顶插入新的元素。
Pop(*S,*e )
初始条件:桟S已存在 操作结果:删除栈顶元素,并用e返回其值。
StackE mpty(S)
初始条件:栈s已存在
操作结果:若S为空栈,则返回1,否则返回0。
C learStack(*S)
初始条件:栈S已存在
操作结果:将栈S清空。
InStac k(char* ch ,SqStack *s)
初始条件:栈S已存在
操作结果:把字符数组从右至左压入栈中。
}ADT Stack
ADT Q ueue{
数据对象:D={ai | ai GCharSeti = 1,2, n n^O }
数据关系:Rl={i-l,ai |ai-l,aiEDti=l、2, n}
基本操作:
I nitQueue(*Q)
操作结果:构造一个空队列Cb
En Queue (*Q,e )
初始条件:队列Q己经存在。
操作结果:插入元素e为Q的新的队尾元素。
DeQueu e (*Q/e)
初始条件:队列Q已经存在。
操作结果:删除Q的对头元素,并以e返回其值。
QueueEm pty (Q)
初始条件:队列Q己经存在。
操作结果:若队列Q为空栈,则返回1,否则返回0。
}ADT Qu eue
2. 详细设计(源代码)
(使用c语言)
#dio.h
#inc b.h
#defin e STACK J N IT_SIZE 10 0//存储空间初始分配量 #define STACKINCRE MENT 10//存储空间分配增量 typ edef struc t {
char * base;//栈底指针 cha r* top;//栈顶指针 int stacksize ;
JSqStack;
typedef st ruct QNote {
char data;
s truct QNot e *next;
}Q Note,*Queu ePtr;
typed ef struct
{
QueueP tr front;//队头指针
Q ueuePtr re ar;//队尾指针
}LinkQueue;
void InitS tack(SqSta ck *s)
{//构造一个空栈
s -base=(ch ar*)malloc (STACKJNI T_SIZE*siz eof(char));
s-to p=s-base;
s-sta cksize=STA CK」NIT_SI ZE;
}
void P ush(SqStac k *s,char e)
{//插入元素e为新的栈顶元素
if(s-top -s-base=STACKJNIT _SIZE)
{
s -base=(ch ar*)reallo c(s-base,(s-stacks ize+STACKI NCREMENT)*sizeof(cha r)); s-〉top=s -base+s-stacksize; s-stacksize +=STACKINC REMENT;
}
*(s-top)=e;
s-top++;
}
voi
原创力文档


文档评论(0)