魔王语言解释-数据结构课程设计.docx
《魔王语言解释-数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《魔王语言解释-数据结构课程设计.docx(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实习2、魔王语言解释一、需求分析.问题描述有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没人能听的情,但他的语言 是可以逐步解释成人能懂得语言的,因为他的语言是由以下两种形式的规则由人的语言逐步抽象 上去的:(1) a-P 1 P2 . Pn(2) (0 6 16 2. 6 n) 一9 6 n 0 6 n-l . 0 6 1 0在这两种形式中,从左到右均表示解释。试写个魔王解释系统,把他的话解释成人能听懂 得话。1 .基本要求用下述两条具体规则和上述规则形式(2)实现。设大写字母表示魔王语言的词汇;小 写字母表示人的语言词汇;希腊字母表示可以用大写或小写字母代换的变量。魔王语言可含人
2、的词汇。(1) BtAdA(2) Asae.测试数据B (ehnxgz) B 解释成Isaedsaeezegexenehelsaedsae若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是“天上一个鹅地上一个鹅 鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一个鹅地上一个鹅”。tdSaeZgXnh天地上-只鹅追赶下蛋恨.实现提示将魔王的语言自右至左进栈,总是处理栈顶字符。若是开括号,则逐一出栈,将字母顿序 入队列,直至闭括号出栈,并按规则要求逐一出队列再处理后入栈。其他情形较简单,请读者思 考如何处理。应首先实现栈和队列的基本操作。二、概要设计1、设定栈的抽象数据类型定义:ADT Stack 数据对象:D=
3、 a | a CharSet, i= 1,2,n,.n20 数据关系:Rl= | a ,a GD, a a ,i=l,2,ni-1 i i-l i i-l i基本操作:InilStack(*S)操作结果:构造一个空栈。Push(*S,e)初始条件:栈S已存在操作结果:在栈顶插入新的元素。Pop(*S,*e)初始条件:栈S已存在操作结果:删除栈顶元素,并用e返回其值。StackEmpty(S)初始条件:栈S已存在操作结果:若S为空栈,则返回I,否则返回0。ClcarStack(*S)初始条件:栈S已存在操作结果:将栈S清空。InStack(char* ch,SqStack *s)初始条件:栈S已
4、存在操作结果:把字符数组从右至左压入栈中。ADT StackADT Queue 数据对象:D=ai | ai CharSet i= 1,2,n,.n20 数据关系:Rl= |ai-l,aiD t i= 1,2,n基本操作:InitQueue (*Q)操作结果:构造一个空队列Q。EnQueue (*Q,e)初始条件:队列Q已经存在。操作结果:插入元素e为Q的新的队尾元素。DeQueue (*Q,*e)初始条件:队列Q已经存在。操作结果:删除Q的对头元素,并以e返何其值。QueueEmpty (Q)初始条件:队列Q已经存在。操作结果:若队列Q为空栈,则返网1,否则返回0。ADT Queue三、详细
5、设计(源代码)(使用C语言)#include#include#define STACK_INIT_SIZE 100存储空间初始分配量#define STACKINCREMENT 10存储空间分配增量typedef struct(char* base;栈底指针char* top;栈顶指针int stacksize;SqStack;typedef struct QNotechar data;struct QNote *next;jQNote/QueuePtr;typedef struct (QueuePtr front;队头指针QueuePtr rear; 队尾指针LinkQueue;void l
6、nitStack(SqStack *s)构造一个空栈s-base=(char*)malloc(STACK_INIT_SIZE*sizeof(char);s-top=s-base;s-stacksize=STACK_INIT_SIZE;)void Push(SqStack *s,char e)插入元素e为新的栈顶元素if(s-top-s-base=STACK_INIT_SIZE)(s-base=(char*)realloc(s-base/(s-stacksize+STACKINCREMENT)*sizeof(char); s-top=s-base+s-stacksize;s-stacksize+
7、=ST ACKINCREMENT;)*(s-top)=e;s-top+;)void PopfSqStack *s,char *e)元素e出栈*e=*-s-top;)int StackEmptyfSqStack s)判断栈是否为空if(s.top=s.base)return 1;else return 0;void ClearStack(SqStack *s)清空栈s-top=s-base;)void InitQueuefLinkQueue *q)构造一个空队列q-front=q-rear=(QNote*)malloc(sizeof(QNote); q-front-next=NULL;)void
8、 EnQueue(LinkQueue *q,char e)插入元素e为新的队尾元素QNote*P;p=(QNote*)malloc(sizeof(QNote);p-data=e;p-next=NULL;q-rear-next=p;q-rear=p;)void DeQueue(LinkQueue *q,char *e)元素出队QNote *p;p=q-front-next;*e=p-data;q-front-next=p-next;if(q-rear=p)q-rear=q-front;free(p);)int QueueEmpty(LinkQueue q)判断队列是否为空if(q.front=q
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 魔王 语言 解释 数据结构 课程设计
限制150内