文档库 最新最全的文档下载
当前位置:文档库 › 魔王语言解释

魔王语言解释

魔王语言解释
魔王语言解释

数据结构课程设计文档

2.2魔王语言解释(线性)

[问题描述]

有一个魔王总是使用自己的一种非常精练而又抽象的语言讲话,没有人能听得懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的:

(1)α-> β1β2…βm

(2)(θδ1δ2…δn)->θδnθδn-1…θδ1θ

在这两种形式中,从左到右均表示解释。试写一个魔王语言的解释系统,把他的话解释成人能听得懂的话。

[基本要求]

用下述两条具体规则和上述规则形式(2)实现。设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母代换的变量。魔王语言可含人的词汇。

(1)B -> tAdA

(2)A -> sae

[测试数据]

B(ehnxgz)B解释成tsaedsaeezegexenehetsaedsae

若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是:“天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅”。

t d s a e z g x n h

天地上一只鹅追赶下蛋恨

一:需求分析

(1)以一维数组demon[ i ]表示魔王语言.

(2)魔王语言由用户输入,初始保存在demon[ i ]中.

(3)魔王语言与人类语言对应关系固化在程序中.

(4)实现过程:

A:初始,魔王语言接收后存放在demon[ i ]中.

B:初次遍历数组,将数组中括号内的元素入栈,同时插入相应首字母;

C:再次遍历数组,将数组元素依次入队。(小写字母直接入队;大写字母经翻译成相应字符后入队;遇到括号,将栈中保存的元素依次出栈入队)在翻译过程中,如果依旧包含大写字母,则置flag为1,否则为0。

D:将队列中元素赋值给demon[ i ]。如果此时flag=1,则再次重复C过程。直至所有元素为人类语言。

E:输出demon[ i ]。此时数组中元素为对应的人类语言。注:如果程序中没有相应的对应关系,则翻译成“???”。

二:概要设计:

1:设定栈的抽象数据类型定义:

ADT stack{

数据对象:D={ai|ai∈CharSet,i=1,2,…,n,n>=0}

数据关系:R1={|ai-1,ai∈D,i=2,…,n}

基本操作:

initstack (&s)

操作结果:构造一个空栈s.

push (&s,e)

初始条件:栈s已存在.

操作结果:在栈s的栈顶插入新的栈顶元素e.

pop(&s,&e)

初始条件:栈s已存在.

操作结果:删除s的栈顶元素,并以e返回其值.

}ADT stack

2:设定队列的抽象数据类型:

ADT queue{

数据对象:D={ai|ai∈Elemset,i=1,2,…,n,n>=0}

数据关系:R1={|ai-1,ai∈D,i=2,…,n}

基本操作:

initqueue(&q)

操作结果: 构造一个空队列q.

enqueue(&q, e)

初始条件: 队列q已存在.

操作结果: 插入元素e为q的新队尾元素.

dequeue(&q,&e)

初始条件: q为非空队列.

操作结果: 删除q的队头元素,并用e返回其值.

}ADT queue

3:本程序包含四个模块:

1)主函数模块.其中主函数为:

status main()

{

初始化栈;

初始化队列;

接收魔王语言输入到数组demon[i ];

遍历数组将括号中元素进栈;

while(数组demon[i ]中元素有大写字母)

{ 翻译排序处理后入队列;

将对列元素保存在数组demon[i ];

}

输出人类语言(数组demon[ i]);

}

2)括号内元素入栈处理模块.

tempstack(&temps)

将括号内元素入栈,依次插入首字符.

举例:(abcd)->adacaba.

3)排序入队列模块.

sort(&s,&q)

{

遍历数组;

{

遇到小写字母,直接入队列;

遇到大写字母,翻译大写后入队列;

遇到括号,将栈中保存的元素依次出栈入队列; }

}

4)翻译大写处理模块.

spenqueue(&*q,key)

{

switch(key)

{

找到各个大写字母对应的字符串.

没有相应的则解释为’???’

}

}

各模块之间调用关系:

主函数模块

{

括号内元素入栈处理模块;

排序入队模块

{

翻译大写处理模块;

}

}

三:详细设计

1.定义全局变量

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define NULL 0

#define OVERFLOW -2

#define MAXSIZE 100

#define stack_init_size 100

#define stackincrement 10

typedef char selemtype;

typedef char qelemtype;

typedef char elemtype;

typedef int status;

char e;

char demon[MAXSIZE];

2.栈类型及其基本操作

typedef struct

{

selemtype *base;

selemtype *top;

int stacksize;

}sqstack;

status initstack (sqstack *s)

{

s->base=(selemtype *)malloc(stack_init_size*sizeof(selemtype));

if(!s->base) exit (OVERFLOW);

s->top=s->base;

s->stacksize=stack_init_size;

return OK;

}/*创建栈*/

status push (sqstack *s,selemtype e)

{

if(s->top-s->base>=s->stacksize)

{

s->base=(elemtype *) realloc(s->base,(s-

>stacksize+stackincrement)*sizeof(elemtype));

if(!s->base) exit(OVERFLOW);

s->top=s->base+s->stacksize;

s->stacksize+=stackincrement;

}

*(s->top++)=e;

return OK;

}/*入栈*/

status pop(sqstack *s,selemtype *e)

{

if(s->top==s->base) return ERROR;

*e=*(--(s->top));

return OK;

}/*出栈*/

3.队列类型及其基本操作

typedef struct qnode

{

qelemtype data;

struct qnode *next;

}qnode,*queueptr;

typedef struct

{

queueptr front;

queueptr rear;

}linkqueue;

status initqueue(linkqueue *q)

{

q->front=q->rear=(queueptr)malloc(sizeof(qnode)); if(!q->front) exit(OVERFLOW);

q->front->next=NULL;

return OK;

}/*创建队列*/

status enqueue(linkqueue *q,qelemtype e) {

queueptr p;

p=(queueptr)malloc(sizeof(qnode));

if(!p) exit(OVERFLOW);

p->data=e;

p->next=NULL;

q->rear->next=p;

q->rear=p;

return OK;

}/*入队*/

status dequeue(linkqueue *q,qelemtype *e) {

queueptr p;

if(q->front==q->rear) return ERROR;

p=q->front->next;

*e=p->data;

q->front->next=p->next;

if(q->rear==p)

{

q->rear=q->front;

}

free(p);

return OK;

}/*出队*/

4.括号内元素入栈处理函数

void tempstack(sqstack *temps)

{

int i=0;

char t;

char c;

c=demon[i ];

for(i=0;c!='#';i++)/*遍历数组*/

{

c=demon[i ];

if(c=='(')/*遇到开括号*/

{

t=demon[i+1];/*取括号中的首字母*/

push(temps,t);/*入栈*/

i++;/*指向首字母*/

do

{

i++;

c=demon[i ];

push(temps,c)/*第一次循环将次字母入栈*/;

push(temps,t);/*再将首字母进栈*/

}

while(c!=')');/*直到括号中元素全部进栈*/

pop(temps,&t);/*将多余进栈的首字母t出栈*/

pop(temps,&t); /*将多余进栈的’)’出栈*/

}

}

}/*临时栈*/

5.特殊入队函数

void spenqueue(linkqueue *q,char key)

{

int j=0;

char a[5];

switch(key) /*判断大写字母对应的字符串*/

{

case'A':strcpy(a,"sae");break;

case'B':strcpy(a,"tAdA");break;

case'C':strcpy(a,"abc");break;

case'D':strcpy(a,"def");break;

case'E':strcpy(a,"ghi");break;

case'F':strcpy(a,"klm");break;

case'H':strcpy(a,"mop");break;

default:strcpy(a,"???"); /*不能翻译的魔王语言以”???”输出*/ }

while(a[j]!='\0') /*如果数组还有字母*/

{

enqueue(q,a[j]);/*进队*/

j++;

}

}/*特殊入队*/

6.排序入队处理函数

status sort(sqstack *s,linkqueue *q)

{

qnode b;

int flag=0;/*大写字母监视哨置零*/

int i;

for(i=0;demon[ i]!='#';i++)/*遍历数组*/

{

b.data=demon[ i];

if( ('a'<=b.data&&b.data<='z') || b.data=='?') /*如果是小写字母或者’?’则直接入队*/

{

enqueue(q,b.data);

}

else

{

if('A'<=b.data&&b.data<='Z') /*如果是大写字母,则调用特殊入队函数,*/

{

spenqueue(q,b.data);

flag=1; /*发现大写字母监视哨置1*/

}

else

{

if(b.data=='(')/*如果是括号*/

{

do

{

pop(s,&e);

enqueue(q,e);

}

while(!(s->top==s->base)); /*只要栈不为空,则出栈进队*/

while (b.data!=')') /*只要还指向括号内元素,就继续往后移,保证原括号内的元素不再进栈*/

{

i++;

b.data=demon[ i];

}

}

}

}

}

return flag;

}/*排序*/

status main()

{

sqstack s1;

linkqueue q1;

int k=0;

int flag=1;

clrscr();

printf("\n\n\n\t\t\tWELCOME!\n");

printf("\t***************************************\n"); printf("\tPlease Input The Demon's Words:\n\t");

printf("!: Less Than 30 Letters: )\n\t");

printf("!: Please Stop By '#': )\n\t");

printf("***************************************\n\t"); printf("The Demon's Words:\n\t");

scanf("%s",demon);

printf("\n\t***************************************"); initstack(&s1); /*创建栈*/

initqueue(&q1); /*创建队*/

tempstack(&s1); /*调用函数*/

while (flag==1) /*如果有大写字母*/

{

k=0;

flag=sort(&s1,&q1);

while(q1.front!=q1.rear) /*重写demon[i ]*/

{

dequeue(&q1,&e);

demon[k]=e;

k++;

}

demon[k]='#';

}

demon[k]='\0';

printf("\n\tThe Human's Words:\n\t%s",demon);

printf("\n\n\t***************************************"); printf("\n\t\t\tTHANK YOU!\n\t");

printf("Please press any key to exit...");

if(getch()) exit(1);

}

}/*主函数*/

四:调试分析

1. 函数调用比较多,因而得仔细对待数值和地址的传递.

2. 由于魔王语言中’B’中仍然包含着大写字母(tAdA).所以考虑设置flag.

3. 函数数组遍历.进栈出栈.入队出队中都要牵扯指针的移动,所以要仔细考虑一循环的条件以及进栈元素的个数.

五:用户手册

1. 本程序运行环境为DOS/WINDOWS操作系统,执行文件为:魔王语言解释.exe。

2. 进入程序即显示提示信息:

WELCOME!

***************************************

Please Input The Demon's Words:

!: Less Than 30 Letters: )

!: Please Stopped By '#': )

***************************************

The Demon's Words:

等待用户输入.用户输入字符以’#’回车结束.

***************************************

The Human Words:

(翻译后的语言)

***************************************

THANK YOU!

六:测试结果

WELCOME!

***************************************

Please Input The Demon's Words:

!: Less Than 30 Letters: )

!: Please Stopped By '#': )

***************************************

The Demon's Words:

B(ehnxgz)B#

***************************************

The Human Words:

tsaedsaeezegexenehetsaedsae

***************************************

THANK YOU!

测试的数据和结果分别为:

1(要求): B(ehnxgz)B#->tsaedsaeezegexenehetsaedsae 另外测试的数据有:

2:abcd#->abcd ;

3:mBiM#->mtsaedsaei??? ;

4:gcBA(oBifz)#->gctsaedsaesaeozofoiotsaedsaeo ;

结果皆正确。

七.附录

源程序文件清单:

魔王语言解释.c //源程序文件

魔王语言解释.exe //可执行文件

魔王语言解释测试用例.doc

魔王语言解释-大数据结构课程设计

实习2、魔王语言解释 一、需求分析 1. 问题描述 有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没人能听的懂,但他的语言是可以逐步解释成人能懂得语言的,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的: (1)α->β1 β2 ... βn (2)(θδ1 δ2 ... δn) —>θδn θδn-1 ...θδ1 θ 在这两种形式中,从左到右均表示解释。试写一个魔王解释系统,把他的话解释成人能听懂得话。 2. 基本要求 用下述两条具体规则和上述规则形式(2)实现。设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写或小写字母代换的变量。魔王语言可含人的词汇。 (1)B—>tAdA (2)A—>sae 3. 测试数据 B(ehnxgz)B 解释成tsaedsaeezegexenehetsaedsae 若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是“天上一个鹅地上一个鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一个鹅地上一个鹅”。 4. 实现提示 将魔王的语言自右至左进栈,总是处理栈顶字符。若是开括号,则逐一出栈,将字母顺序入队列,直至闭括号出栈,并按规则要求逐一出队列再处理后入栈。其他情形较简单,请读者思考如何处理。应首先实现栈和队列的基本操作。 二、概要设计 1、设定栈的抽象数据类型定义: ADT Stack { 数据对象:D= {a i| a i∈CharSet, i= 1,2,……n,. n≥0 } 数据关系:R1={ | a i-1,a i∈D, a i-1

魔王语言数据结构实验报告课案

数据结构实验报告 2.2 魔王语言解释 [问题描述] 有一个魔王总是使用自己的一种非常精练而又抽象的语言讲话,没有人能听得懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的: (1)α-> β1β2…βm (2)(θδ1δ2…δn)->θδnθδn-1…θδ1θ 在这两种形式中,从左到右均表示解释。试写一个魔王语言的解释系统,把他的话解释成人能听得懂的话。 [基本要求] 用下述两条具体规则和上述规则形式(2)实现。设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母代换的变量。魔王语言可含人的词汇。 (1)B -> tAdA (2)A -> sae [测试数据] B(ehnxgz)B解释成tsaedsaeezegexenehetsaedsae

若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是:“天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅”。 t d s a e z g x n h 天地上一只鹅追赶下蛋恨 一:需求分析 (1)以一维数组demon[ i ]表示魔王语言. (2)魔王语言由用户输入,初始保存在demon[ i ]中. (3)魔王语言与人类语言对应关系固化在程序中. (4)实现过程: A:初始,魔王语言接收后存放在demon[ i ]中. B:初次遍历数组,将数组中括号内的元素入栈,同时插入相应首字母; C:再次遍历数组,将数组元素依次入队。(小写字母直接入队;大写字母经翻译成相应字符后入队;遇到括号,将栈中保存的元素依次出栈入队)在翻译过程中,如果依旧包含大写字母,则置flag为1,否则为0。 D:将队列中元素赋值给demon[ i ]。如果此时flag=1,则再次重复C过程。直至所有元素为人类语言。 E:输出demon[ i ]。此时数组中元素为对应的人类语言。注:如果程序中没有相应的对应关系,则翻译成“???”。二:概要设计: 1:设定栈的抽象数据类型定义:

数据结构实验

1 线性表及其应用 问题:约瑟夫环 问题描述:编号为1,2,…,n的n个人按顺时针方向围坐一 圈。每人持有一个密码(正整数),一开始任选一个正整数作为 报数上限值m,从第一个人开始按顺时针方向自1开始报数, 报到m时停止报数。报m的人出列,将他的密码作为新的m值, 从他顺时针方向的下一个人开始重新从1报数,直至所有人全 部出列为止。试设计一个程序求出出列顺序。 基本要求:利用单向循环链表存储结构模拟此过程。 2 栈和队列及其应用 题目:魔王语言解释 问题描述:有一个魔王总是使用自己的一种非常精练而抽象的语 言讲话,没有人能听的懂,但他的语言是可以逐步解释成人能听 懂的语言,因为他的语言是由以下两种形式的规则由人得语言逐 步抽象上去的: (1)α→β 1β 2… β m (2)(θδ 1δ 2… δ n )→θδ n θδ n-1… θδ 1 θ 在这两种形式中,从左到有均表示解释。试写一个魔王语言的解 释系统,把他的话解释成人能听的懂的话。 基本要求:用下述两条具体规则和上述规则形式(2)实现。设 大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希 腊字母表示可以用大写字母或小写字母代换的变量。魔王语言可 含人的词汇。 (1)B→tAdA (2)A→sae 3 串及其应用

题目:文学研究助手 问题描述:存在一篇英文文章(以串表示),以及若干关键字。编 写程序统计关键字的出现次数。 基本要求:改进KMP算法以适应多关键字匹配。 4 数组和广义表 题目:数组转置 问题描述:存在稀疏矩阵A,编写程序将A转置为B。 基本要求:用三元组表示稀疏矩阵,应用算法5.2完成转置。 5 树、图及其应用 题目:Huffman编/译码器 问题描述:使用Huffman编码进行通信可以节省通信成本。对于 双工系统而言,要求在发送端和接受端均有编码器和译码器。试 为该系统设计一个编/译码器。 基本要求:至少具有功能(1)初始化(2)编码(3)译码(4) 打印代码。 6 存储管理、查找和排序 题目:内部排序算法比较 问题描述:通过随机数据比较各算法的关键字比较次数与移动次数。 基本要求:至少比较快速排序与堆排序。对结果进行简单分析。

魔王语言解释

实习报告 题目:编制一个魔王语言解释的程序 班级:06052711 姓名:曹旭学号:06057104 完成日期:2007.11.27 一、需求分析 [问题描述] 有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没人能听的懂。但他的语言是可以逐步解释成人能懂得语言的,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的: (1)α->β1β2...βn (2)(θδ1δ2...δn)->θδnθδn-1...θδ1θ 在这两种形式中,从左到右均表示解释;从右到左表示抽象。试写一个魔王解释系统,把他的话解释成人能听懂得话。 [基本要求] 用下述两条具体规则和上述规则形式(2)实现。设大写字母表示魔王语言的词汇;小写字 母表示人的语言词汇;希腊字母(a,b1,s,y1等)表示可以用大写或小写字母代换的变量。魔王语言可含人的词汇。 (1)B->tAdA (2) A->sae [测试数据] B(einxgz)B 解释成tsaedsaeezegexeneietsaedsae 若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是“天上一个鹅地上一个鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一个鹅地上一个鹅。” t d s a e z G x n i 天地上一个鹅追赶下蛋恨 [实现提示] 将魔王的语言自右至左进栈,总是处理栈顶。若是开括号,则逐一出栈,将字母顺序入队列,直至闭括号出栈,并按规则要求逐一出队列再处理后入栈。其他情形较简单,请读者思考如何处理,应首先实现栈和队列的基本运算 二、概要设计 为实现上述程序功能,应以栈和队列来表示。 1.设定栈的抽象数据类型定义为: ADT Stack{ 数据对象:D={ai | ai∈CharSet,I=1,2,......,n,n≥0} 数据关系:R1={< ai-1,ai > |ai-1,ai∈D,I=1,2,......,n} 基本操作: ListInitiate (&S)

魔王语言实验报告

数据结构实验报告 (魔王语言) 一、【实验构思(Conceive)】(10%) (本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识) 魔王语言的解释规则: 大写字母表示魔王语言的词汇,小写字母表示人的词汇语言,魔王语言中可以包含括号,魔王语言的产生式规则在程序中给定,当接收用户输入的合法的魔王语言时,通过调用魔王语言翻译函数来实现翻译。 二、【实验设计(Design)】(20%) (本部分应包括:抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系) 抽象数据类型:typedef struct {StackElementType elem[Stack_Size]; int top; }SeqStack; 主程序模块:int main() { GhostLanage(); printf("\n\t按任意键退出\n\n"); }

各子程序模块:/*初始化栈*/ void InitStack(SeqStack *s) {s->top=-1; } /*进栈操作*/ void Push(SeqStack *s,StackElementType x) {if(s->top==Stack_Size-1) printf("\n\t栈已满!"); else {s->top++;s->elem[s->top]=x;} } /*出栈操作*/ void Pop(SeqStack *s,StackElementType *x) {if(s->top==-1) printf("\n\t栈为空!"); else {*x=s->elem[s->top];s->top--;} } /*取栈顶元素*/ void GetT op(SeqStack *s,StackElementType *x) {if(s->top==-1) printf("\n\t栈为空!"); else *x=s->elem[s->top]; } /*判断栈是否为空*/ int IsEmpty(SeqStack *s) {if(s->top==-1) return(0); else return(1); }

设计题目要求举例

数据结构课程设计题目 地图着色 马踏棋盘 栈的实现 八皇后算法 车厢调度 公园导游图 通讯录实现 同学录实现 导游系统实现 最小生成树实现 统计成绩系统 利用学到的编程知识和编程技巧,通过布置具有一定难度的程序设计题目,让学生自己到图书馆查阅资料或网上咨询独立完成程序的编写,并能运用学过的技巧独立上机调试完成。 系统类题目: 题目1:学生信息管理系统设计 试设计一学生信息管理系统,使之能提供以下功能: 系统以菜单方式工作 学生信息包括:学号,姓名,年龄,别,出生年月,地址,电话,E-mail 等。 3https://www.wendangku.net/doc/703876679.html,、学生信息录入功能(学生信息用文件保存)---输入 4、学生信息浏览功能---输出

5、查询、排序功能---算法 6、学生信息的删除与修改(可选项) 题目2:职工信息管理系统设计 试设计一职工信息管理系统,使之能提供以下功能: 1、系统以菜单方式工作。 2、职工信息包括职工号、姓名、别、年龄、学历、工资、住址、电话等(职工号不重复)。 3、职工信息录入功能(职工信息用文件保存)--输入。 4、职工信息浏览功能--输出。 5、查询和排序功能:(至少一种查询方式) --算法。 6、职工信息删除、修改功能(任选项)。 题目3:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1到m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。 要求:输入数据输入m、,n 其中m、,n 为整数,n输出形式提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号。 难度1:编程先由计算机?想?一个1到100之间的数请人猜,如果人猜对了,则计算机给出提示:?Right!?,否则提示:?Wrong!?,并告诉人所猜的数是大(Too high)还是小(Too low),然后结束游戏。要求每次运行程序时机器所?想?的数不能都是一样的。 难度2:编程先由计算机?想?一个1到100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者?猜?的水平,否则计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止。 难度3:编程先由计算机?想?一个1到100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者?猜?的水平,否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则结束游戏。 难度4:编程先由计算机?想?一个1到100之间的数请人猜,如果人猜对

魔王语言实习报告

实习报告2(魔王语言) 《数据结构》 课程设计报告 课程名称:《数据结构》课程设计课程设计题目:魔王语言实习报告 姓名:倪哲 院系:计算机学院 专业:软件工程 年级:大三 学号:08052319 指导教师:赵葆华

一、需求分析: (1)按要求输入魔王语言,出现相应的格式执行相应的转化,魔王语言中出现的需要翻译的字母要在之后输入其替换内容。 (2)字母替换中,可以存在魔王语言的字母,但最终要翻译成全部是小写字母。 二、概要设计 设计思想 (1)存储结构 根据问题描述,可采用堆栈结构。 结点描述: 定义如下: typedef struct { StackElementType elem[Stack_Size]; int top; }SeqStack; (2)基本思想 a.建立一个规则的结构体,其中一个char型存储某个字母的转换规则,一个int 型存储某个字母的转换规则的长度。 b.输入魔王语言后,再输入出现的要翻译的字母的规则,然后按转换格式进行转换,输出。 设计表示法 GhostLanage - InitStac-Push-Pop-Gettop-Stackempty (1)过程或函数调用的关系图 (2)基于数据结构的操作组 本次实习题目比较简单,只用到一个堆栈,函数 InitStack(),Push(),Pop(),Gettop(),Stackempty(),都是堆栈的基本操作,函数void GhostLanage();就是一个按照规则输出。 (3)过程与接口规格说明 void InitStack(SeqStack *s); //建立栈 void Push(SeqStack *s,StackElementType x); //入栈 void Pop(SeqStack *s,StackElementType *x); //出栈 void GetTop(SeqStack *s,StackElementType *x);取栈顶元素 int StackEmpty(SeqStack *s);判断栈是否为空 void GhostLanage() //主函数

数据结构课程设计

《数据结构课程设计》 Data Structure Course Design 一、课程的性质、教学目的 《数据结构》是计算机软件的一门基础课程,计算机科学各领域及有关的应用软件都要用到各种类型的数据结构。学好数据结构对掌握实际编程能力是很有帮助的。为了学好《数据结构》,必须编写一些在特定数据结构上的算法,通过上机调试,才能更好地掌握各种数据结构及其特点,同时提高解决计算机应用实际问题的能力。 二、实验(上机)时间、地点 第4,5,6,7,8,9,10,12,13,14周,每周一晚上18:30—21:10在一教南一楼机房上机。 三、课程设计要求 每位同学须在线性表、栈和队列、树和图三个部分中各选一题(共三题)按以下要求完成课程设计: 1、设计、调试、运行源程序。 2、通过老师的测试及验收。 3、完成实验报告。 四.设计题 1、线性表部分 【joseph环】 *问题描述:编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。 *要求:利用不带表头结点的单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。 *测试数据: m的初值为20,n=7 ,7个人的密码依次为3,1,7,2,4,7,4,首先m=6,则正确的输出

是什么? *输入数据:建立输入处理输入数据,输入m的初值,n ,输入每个人的密码,建立单循环链表。 *输出形式:建立一个输出函数,将正确的输出序列 【长整数四则运算】 *问题描述:设计一个实现任意长的整数进行加法运算的演示程序。*基本要求:利用双向循环链表实现长整数的存储,每个结点含一个整形变量。任何整形变量的范围是 -(2^15 - 1) (2^15 - 1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。 *测试数据: (1)0;0;应输出“0”。 (2)-2345,6789;-7654,3211;应输出“-1,0000,0000”。 (3)-9999,9999;1,0000,0000,0000;应输出“999 (4)1,0001,0001;-1,0001,0001;应输出“0”。 (5)1,0001,0001;-1,0001,0000;应输出“1”。 (6)-9999,9999,9999;-9999,9999,9999;应输出“1,9999,9999,9998”。 (7)1,0000,9999,9999;1;应输出“1,0001,0000,0000”。 *实现提示: (1)每个结点中可以存放的最大整数为32767,才能保证两数相加不会溢出,但若这样存放,即相当于按32768进制存放,在十进制与32768进制数之间的转换十分不方便,故可以在每个结点中仅存十进制的4位,即不超过9999的非负整数,整个链表表示为万进制。(2)可以利用头结点数据域的符号代表长整数的符号。用其绝对值表示元素结点数目。相加过程中不要破坏两个操作数链表。不能给长整数位数规定上限。 选做内容 实现长整数的四则运算。 2、栈和队列部分 【马踏棋盘】 *问题描述:将马随机放在国际象棋的8X8棋盘Bo阿rd[0..7,0..7]的某个方格中,马按走棋规则进行移动。要求每个方格上只进入一次,走遍棋盘上全部64个方格。编制非递归程序,求出马的行走路线,并按求出的行走路线,将数字1,2,…,64依次填入8X8的方阵输出之。 *测试数据:由读者指定,可自行指定一个马的初始位置。 *实现提示:每次在多个可走位置中选择一个进行试探,其余未曾试探过的可走位置必须用适当结构妥善管理,以备试探失败时的“回溯”(悔棋)使用。并探讨每次选择位置的“最佳策略”,以减少回溯的次数。 【魔王语言解释】 [问题描述] 有一个魔王总是使用自己的一种非常精练而又抽象的语言讲话,没有人能听得懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐

魔王语言翻译 数据结构课程设计

魔王语言翻译 题目:编制一个演示魔王语言的翻译程序 班级:信管08-2 姓名:顾先 学号:0801051409 完成日期:2010.5.27 一、需求分析 1. 本演示程序中,魔王语言限制在小写字母‘a’-‘z’之间,且必须限制在括号内以及大写字母A和B。且允许出现重复字符或非法字符,程序运用时自动过滤去,输出的运算结果中将不含重复字符和非法字符。 2. 魔王语言遵守如下规则: (θδ1δ2δ3…δn)→θδnθδn-1…θδ1θ B→tAdA A→sae 3. 演示程序以用户和计算机对话的形式进行,即在计算机终端中显示提示信息之后,有用户自行选择下一步命令,相应输入数据和运算结果在其后显示。 4. 程序的执行命令有:1)选择操作2)任意键清屏 5. 数据测试 B(ehnxgz)B解释成:tsaedsaeezegexenehetsaedsae 二、概要设计 为实现上述功能,需要栈和队列两个抽象数据类型。 1. 栈抽象数据类型定义 ADT stack{ 数据对象:D={ai|a i∈Elemset,i=1,2,3,…n,n>=0} 数据关系:R1={|ai-1,ai∈D,i=2, … n} 基本操作: InitStack(&s) 操作结果:构造一个空栈s。 Push(&s, e) 初始条件:栈s已存在。 操作结果:插入元素e为新的栈顶元素。 Pop(&s, &e) 初始条件:栈s已存在且非空。 操作结果:删除栈s的栈顶元素,并用e返回其值。 StackLenth(&s) 初始条件:栈s已存在。 操作结果:返回s的元素个数,即栈的长度。 ClearStack(&s)

数据结构 课程设计报告 魔王语言解释

题目:魔王语言解释 [问题描述] 有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没有人能听懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的: (1)α->β1β2……βm (2)(θδ1δ2……δn)—>θδnθδn-1……θδ1θ 在这两种形式中,从左到右均表示解释。试写一个魔王语言的解释系统,把他的话解释成人能听得懂的话; [基本要求] 用下述两条具体规则和上述规则形式(2)实现。设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母代换的变量。魔王语言可含人的词汇。 (1)B->tAdA (2)A->sae [测试数据] B(ehnxgz)B解释成tsaedsaeezegexenehetsaedsae 若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是:“天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅”。 [实现提示] 将魔王的语言自右至左进栈,总是处理栈顶字符。若是开括号,则逐一出栈,将字母顺序入队列,直至闭括号出栈,并按规则要求逐一出队列再处理后入栈。其他情形较简单,请读者思考应如何处理。应首先实现栈和队列的基本操作。

[源代码] #include #include #define STACK_INIT_SIZE 100 #define STACK_INCREMENT 10 struct Stack{ char* base; char* top; int stacksize; }; void InitStack(struct Stack &s){//构造栈 s.base=(char*)malloc(STACK_INIT_SIZE*sizeof(char)); s.top=s.base; s.stacksize=STACK_INIT_SIZE; } void Push(struct Stack &s,char e){//压入元素 if(s.top-s.base>=STACK_INIT_SIZE){ s.base=(char*)realloc(s.base,(s.stacksize+STACK_INCREMENT)*sizeof(char)); s.top=s.base+s.stacksize; s.stacksize+=STACK_INCREMENT;

魔王语言 数据结构试验报告

魔王语言系统解释 一、需求分析 [问题描述] 有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没人能听的懂。但他的语言是可以逐步解释成人能懂得语言的,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的: (1)α->β1β2...βn (2)(θδ1δ2...δn)->θδnθδn-1...θδ1θ 在这两种形式中,从左到右均表示解释;从右到左表示抽象。试写一个魔王解释系统,把他的话解释成人能听懂得话。 [基本要求] 用下述两条具体规则和上述规则形式(2)实现。设大写字母表示魔王语言的词汇;小写字 母表示人的语言词汇;希腊字母(a,b1,s,y1等)表示可以用大写或小写字母代换的变量。 魔王语言可含人的词汇。 (1)B->tAdA (2) A->sae [测试数据] B(einxgz)B 解释成 tsaedsaeezegexeneietsaedsae 若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是“天上一个鹅地上一个鹅 鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一个鹅地上一个鹅。” t d s a e z G x n i 天地上一个鹅追赶下蛋恨 [实现提示] 将魔王的语言自右至左进栈,总是处理栈顶。若是开括号,则逐一出栈,将字母顺序入队列,直至闭括号出栈,并按规则要求逐一出队列再处理后入栈。其他情形较简单,请读者思考如何处理,应首先实现栈和队列的基本运算 二、概要设计 为实现上述程序功能,应以栈和队列来表示。 1.设定栈的抽象数据类型定义为: ADT Stack{ 数据对象:D={ai | ai∈CharSet,I=1,2,......,n,n≥0} 数据关系:R1={< ai-1,ai > |ai-1,ai∈D,I=1,2,......,n} 基本操作: ListInitiate (&S) 操作结果:构造一个空栈S。

(精选)云南大学软件学院数据结构实验3

实验难度: A □ B □ C □序号学号姓名成绩 指导教师(签名) 学期:2017秋季学期 任课教师: 实验题目: 组员及组长: 承担工作: 联系电话: 电子邮件: 完成提交时间:年月日

一、【实验构思(Conceive)】(10%) (本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计等相关知识,对问题进行概要性地分析) 魔王语言的解释规则: 大写字母表示魔王语言的词汇,小写字母表示人的词汇语言,魔王语言中可以包含括号,魔王语言的产生式规则在程序中给定,当接收用户输入的合法的魔王语言时,通过调用魔王语言翻译函数来实现翻译。 在 A 的基础上,(根据产生式)自定义规则,将一段魔王的话翻译为有意义的人类语言(中文):输入wasjg,则魔王语言解释为“我爱数据结构”。 运用了离散数学的一些基本知识及程序设计知识。 二、【实验设计(Design)】(20%) (本部分应包括:抽象数据类型的定义和基本操作说明,程序包含的模块以及各模块间的调用关系,关键算法伪码描述及程序流程图等,如有界面则需包括界面设计,功能说明等) //---------------抽象数据类型的定义------------------// #define STACK_INIT_SIZE 50 #define STACKINCREMENT 10 #define OVERLOW -2 #define ERROR -1 typedef struct { char *base; //顺序栈的栈底指针 int top; //顺序栈的栈顶 int size; //栈元素空间的大小 }SqStack; //结构体类型顺序栈 typedef struct { char *base; int front; int rear; }SqQueue; //结构体类型队列 //---------------各个模块功能的描述------------------// void Init_SqStack(SqStack &s) //初始化顺序桟 void Push_SqStack(SqStack &s, char c) //压入数据 int Pop_SqStack(SqStack &s, char &e) //出桟 char GetTop_SqStack(SqStack s)//或得栈顶

云南大学软件学院数据结构实验

实验难度: A □ B □ C □序号学号成绩 指导教师(签名) 学期:2017秋季学期 任课教师: 实验题目: 组员及组长: 承担工作: 联系: 电子: 完成提交时间:年月日

一、【实验构思(Conceive)】(10%) (本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计等相关知识,对问题进行概要性地分析) 魔王语言的解释规则: 大写字母表示魔王语言的词汇,小写字母表示人的词汇语言,魔王语言中可以包含括号,魔王语言的产生式规则在程序中给定,当接收用户输入的合法的魔王语言时,通过调用魔王语言翻译函数来实现翻译。 在A 的基础上,(根据产生式)自定义规则,将一段魔王的话翻译为有意义的人类语言(中文):输入wasjg,则魔王语言解释为“我爱数据结构”。 运用了离散数学的一些基本知识及程序设计知识。 二、【实验设计(Design)】(20%) (本部分应包括:抽象数据类型的定义和基本操作说明,程序包含的模块以及各模块间的调用关系,关键算法伪码描述及程序流程图等,如有界面则需包括界面设计,功能说明等) //---------------抽象数据类型的定义------------------// #define STACK_INIT_SIZE 50 #define STACKINCREMENT 10 #define OVERLOW -2 #define ERROR -1 typedef struct { char *base; //顺序栈的栈底指针 int top; //顺序栈的栈顶 int size; //栈元素空间的大小 }SqStack; //结构体类型顺序栈 typedef struct { char *base; int front; int rear; }SqQueue; //结构体类型队列 //---------------各个模块功能的描述------------------// void Init_SqStack(SqStack &s) //初始化顺序桟 void Push_SqStack(SqStack &s, char c) //压入数据 int Pop_SqStack(SqStack &s, char &e) //出桟 char GetTop_SqStack(SqStack s)//或得栈顶

课程设计——魔王语言解释

#include "stdio.h" #include "stdlib.h" #include "malloc.h" //定义全局变量 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define NULL 0 #define OVERFLOW -1 #define MAXSIZE 100 #define stack_init_size 100 #define stackincrement 10 char e; char MoWords[MAXSIZE]; //定义数组,从系统输入要翻译的魔王语言static int length=0; //定义链栈类型 typedef struct{ char *base; //栈底指针 char *top; //栈顶指针 int stacksize; //栈存储空间的大小 }sqstack; //定义链队列类型 typedef struct qnode{ char data; struct qnode *next; }qnode,*queueptr; typedef struct{ queueptr front; //队头指针 queueptr rear; //队尾指针 }linkqueue; int InitStack(sqstack *s){ s->base=(char *)malloc(stack_init_size*sizeof(char)); if(!s->base) exit (OVERFLOW); s->top=s->base; s->stacksize=stack_init_size; return OK; }//end 初始化栈

云南大学数据结构实验3

实验难度: A □ B C □ 学期:2017秋季学期 任课教师: 储星 实验题目: 栈和队列及其应用 组员及组长: 承担工作: 联系电话: 电子邮件: 完成提交时间: 2018 年 11 月 18 日

一、【实验构思(Conceive)】(10%) (本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计等相关知识,对问题进行概要性地分析) 魔王语言的解释规则: B →tAdA;A→ sae;(ehnxgz) → ezegexenehe 则魔王语言B(ehnxgz)B解释成tsaedsaeezegexenehetsaedsae 大写字母表示魔王语言的词汇,小写字母表示人的词汇语言,魔王语言中可以包含括号,魔王语言的产生式规则在程序中给定,当接收用户输入的合法的魔王语言时,通过调用魔王语言翻译函数来实现翻译。 在 A 的基础上,(根据产生式)自定义规则,将一段魔王的话翻译为有意义的人类语言(中文): 字母-汉字对应表: "t d s a e z g x n h" "天地上一个鹅追赶下蛋恨" 运用了离散数学的一些基本知识及程序设计知识。 二、【实验设计(Design)】(20%) (本部分应包括:抽象数据类型的定义和基本操作说明,程序包含的模块以及各模块间的调用关系,关键算法伪码描述及程序流程图等,如有界面则需包括界面设计,功能说明等) 为实现上述程序功能,应以栈和队列来表示。 1.设定栈的抽象数据类型定义为: typedef struct stack { char *base; // 顺序栈的栈底指针 char *top; // 顺序栈的栈顶 int stacksize; // 栈元素空间的大小 }stack; // 结构体类型顺序栈 基本操作:

数据结构课程设计实验报告

青岛理工大学 数据结构课程设计报告 题目一:魔王语言解释 题目二:文学研究助手 院(系):计算机工程学院 学生姓名: 龚剑勇 班级:计算机科学与技术092 学号:200907079 起迄日期: 2011/6/20——2011/6/30 指导教师: 张艳 2010—2011年度第 2 学期

题目一:魔王语言解释 一、需求分析 [问题描述] 有一个魔王总是使用自己的一种非常精练而又抽象的语言讲话,没有人能听得懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的: (1)α-> β1β2…βm (2)(θδ1δ2…δn)->θδnθδn-1…θδ1θ 在这两种形式中,从左到右均表示解释。试写一个魔王语言的解释系统,把他的话解释成人能听得懂的话。 [基本要求] 用下述两条具体规则和上述规则形式(2)实现。设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母代换的变量。魔王语言可含人的词汇。 (1)B -> tAdA (2)A -> sae [测试数据] B(ehnxgz)B解释成tsaedsaeezegexenehetsaedsae 若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是:“天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅”。 t d s a e z g x n h 天地上一只鹅追赶下蛋恨 二、概要设计 1,程序设计思路 (1)以一维数组demon[ i ]表示魔王语言. (2)魔王语言由用户输入,初始保存在demon[ i ]中. (3)魔王语言与人类语言对应关系固化在程序中. (4)实现过程: A:初始,魔王语言接收后存放在demon[ i ]中. B:初次遍历数组,将数组中括号内的元素入栈,同时插入相应首字母; C:再次遍历数组,将数组元素依次入队。(小写字母直接入队;大写字母经翻译成相应字符后入队;遇到括号,将栈中保存的元素依次出栈入队)在翻译过程中,如果依旧包含大写字母,则置flag为1,否则为0。 D:将队列中元素赋值给demon[ i ]。如果此时flag=1,则再次重复C过程。直至所有元素为人类语言。 E:输出demon[ i ]。此时数组中元素为对应的人类语言。注:如果程序中没有相应的对应关系,则翻译成“???”。 2.数据结构设计: 1:设定栈的抽象数据类型定义: ADT stack{ 数据对象:D={ai|ai∈CharSet,i=1,2,…,n,n>=0}

魔王语言实验报告

魔王语言实验报告本页仅作为文档页封面,使用时可以删除 This document is for reference only-rar21year.March

数据结构实验报告 (魔王语言) 一、【实验构思(Conceive)】(10%) (本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识) 魔王语言的解释规则: 大写字母表示魔王语言的词汇,小写字母表示人的词汇语言,魔王语言中可以包含括号,魔王语言的产生式规则在程序中给定,当接收用户输入的合法的魔王语言时,通过调用魔王语言翻译函数来实现翻译。 二、【实验设计(Design)】(20%) (本部分应包括:抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系) 抽象数据类型:typedef struct {StackElementType elem[Stack_Size]; int top;

}SeqStack; 主程序模块:int main() { GhostLanage(); printf("\n\t按任意键退出\n\n"); } 各子程序模块:/*初始化栈*/ void InitStack(SeqStack *s) {s->top=-1; } /*进栈操作*/ void Push(SeqStack *s,StackElementType x) {if(s->top==Stack_Size-1) printf("\n\t栈已满! "); else {s->top++;s->elem[s->top]=x;} }

数据结构设计题目-刘丽

数据结构课程设计要求 1、本次设计为期2周;分组进行,每组成员自由组合,要求不超过5人。 2、在备选题目中,选择2题进行设计,要求线性结构中必选1题。树型和图形结构中选择1题。任意两个小组的题目不能完全相同。 3、题目设计完成后,要提交课程设计报告和实验源代码。 课程设计报告要求包括如下内容: 1)课程设计报告封面; 2)目录; 3)设计题目、要求; 4)设计题目分析:以流程图、文字描述两种方式给出;5)实验结果:测试数据、结果截图; 6)主要源代码:需要添加文字说明其功能。 4、设计最后一天为答辩时间,每个小组抽出2人描述设计过程,其他人员回答老师提问。 5、整个设计的成绩由实验过程(20%)、设计报告(40%)、答辩(40%)三部分成绩组成。 数据结构设计题目 线性结构:

选题1:简单的职工管理系统 【问题描述】 对单位的职工进行管理,包括插入、删除、查找、排序等功能。 【要求】 职工对象包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。(1)新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中。 (2)删除一名职工:从职工管理文件中删除一名职工对象。 (3)查询:从职工管理文件中查询符合某些条件的职工。 (4)修改:检索某个职工对象,对其某些属性进行修改。 (5)排序:按某种需要对职工对象文件进行排序。 【实现提示】 职工对象数不必很多,便于一次读入内存,所有操作不经过内外存交换。 (1)由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。 (2)对职工对象中的"姓名"按字典顺序进行排序。 (3)对排序后的职工对象进行增、删、查询、修改等操作。 选题2:通讯录管理 【问题描述】 该设计采用菜单作为应用程序的主要界面,用控制语句来改变程序执行的顺序,控制语句是实现结构化程序设计的基础。该设计的任务是利用一个简单实用的菜单,通过菜单单项进行选择,实现和完成通讯录管理中常用的几个不同的功能。 【任务要求】 (1)菜单内容 1、通讯录链表的建立 2、通讯者结点的插入 3、通讯者结点的查询 4、通讯者结点的删除 5、通讯录链表的输出 0、退出管理系统 请选择0~5: (2)设计要求 使用0~5来选择菜单项,其他输入则不起作用。 (3)功能函数设计 5个不同功能的算法实现编程题,目的是练习利用链表结构来解决实际应用问题的能力,进一步理解和熟悉线形表的链式存储结构。 【测试数据】 自行设定,注意边界等特殊情况。

魔王语言解释课程设计报告

山东理工大学计算机学院课程设计 (数据结构) 班级 姓名 学号 指导教师 二○一一年一月二十日

课程设计任务书及成绩评定 课题名称魔王语言解释系统设计 Ⅰ、题目的目的和要求: 1、设计目的 巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。 (1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。 (2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。 2、设计题目要求: 【问题描述】 有一个魔王总是使用自己的一种非常精炼而抽象的语言讲话,没有人能听懂,但他的语言是可以逐步解释成人能听得懂的语言,因为他的语言是由以下两种形式的规则逐步抽象上去的: (1)α->β1β2……βm (2)(θδ1δ2……δn)—>θδnθδn-1……θδ1θ 【基本要求】 用下述两条具体规则和上述规则形式(2)实现。设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母代换的变量。 我们有魔王语言的解释规则: (1)B->tAdA ; (2)A->sae; 【测试数据】 魔王语言 B(ehnxgz)B解释成tsaedsaeezegexenehetsaedsae。 魔王语言tdsaexghnAtx解释成txtttsaetnthtgtztetatstdt

Ⅱ、设计进度及完成情况 日期内容 1.10-1.11 选取参考书,查阅有关文献资料,完成资料搜集和系统分析工作。 1.12~1.14 创建相关数据结构,录入源程序。 1.17~1.19 调试程序并记录调试中的问题,初步完成课程设计报告。 1.20~1.21 上交课程设计报告打印版并进行课程设计答辩,要求每个同学针对自己的设计回答指导教师3-4个问题。 考核结束后将课程设计报告和源程序的电子版交班长统一刻光盘上交。 Ⅲ、主要参考文献及资料 [1] 严蔚敏数据结构(C语言版)清华大学出版社 1999 [2] 严蔚敏数据结构题集(C语言版)清华大学出版社 1999 [3] 谭浩强 C语言程序设计清华大学出版社 [4] 与所用编程环境相配套的C语言或C++相关的资料 Ⅳ、成绩评定: 设计成绩:(教师填写) 指导老师:(签字) 二○一一年一月二十一日

魔王语言解释

数据结构课程设计文档 2.2魔王语言解释(线性) [问题描述] 有一个魔王总是使用自己的一种非常精练而又抽象的语言讲话,没有人能听得懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的: (1)α-> β1β2…βm (2)(θδ1δ2…δn)->θδnθδn-1…θδ1θ 在这两种形式中,从左到右均表示解释。试写一个魔王语言的解释系统,把他的话解释成人能听得懂的话。 [基本要求] 用下述两条具体规则和上述规则形式(2)实现。设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母代换的变量。魔王语言可含人的词汇。 (1)B -> tAdA (2)A -> sae [测试数据] B(ehnxgz)B解释成tsaedsaeezegexenehetsaedsae 若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是:“天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅”。 t d s a e z g x n h 天地上一只鹅追赶下蛋恨 一:需求分析 (1)以一维数组demon[ i ]表示魔王语言. (2)魔王语言由用户输入,初始保存在demon[ i ]中. (3)魔王语言与人类语言对应关系固化在程序中. (4)实现过程: A:初始,魔王语言接收后存放在demon[ i ]中. B:初次遍历数组,将数组中括号内的元素入栈,同时插入相应首字母; C:再次遍历数组,将数组元素依次入队。(小写字母直接入队;大写字母经翻译成相应字符后入队;遇到括号,将栈中保存的元素依次出栈入队)在翻译过程中,如果依旧包含大写字母,则置flag为1,否则为0。 D:将队列中元素赋值给demon[ i ]。如果此时flag=1,则再次重复C过程。直至所有元素为人类语言。

相关文档
相关文档 最新文档