魔王语言数据结构试验报告Word格式文档下载.docx

上传人:b****6 文档编号:15728256 上传时间:2022-11-15 格式:DOCX 页数:21 大小:37.56KB
下载 相关 举报
魔王语言数据结构试验报告Word格式文档下载.docx_第1页
第1页 / 共21页
魔王语言数据结构试验报告Word格式文档下载.docx_第2页
第2页 / 共21页
魔王语言数据结构试验报告Word格式文档下载.docx_第3页
第3页 / 共21页
魔王语言数据结构试验报告Word格式文档下载.docx_第4页
第4页 / 共21页
魔王语言数据结构试验报告Word格式文档下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

魔王语言数据结构试验报告Word格式文档下载.docx

《魔王语言数据结构试验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《魔王语言数据结构试验报告Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。

魔王语言数据结构试验报告Word格式文档下载.docx

d

s

a

e

z

g

x

n

h

一只

[测试数据] 

B(einxgz)B解释成tsaedsaeezegexeneietsaedsae 

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

” 

[实现提示] 

将魔王的语言自右至左进栈,总是处理栈顶。

若是开括号,则逐一出栈,将字母顺序入队列,直至闭括号出栈,并按规则要求逐一出队列再处理后入栈。

其他情形较简单,请读者思考如何处理,应首先实现栈和队列的基本运算

二、概要设计

为实现上述程序功能,应以栈和队列来表示。

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

ADTStack{

数据对象:

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。

StackEmpty(S)

初始条件:

栈S已经存在。

若栈S为空栈,则返回TRUE,否则返回FALSE。

Push(&

S,e)

在栈S的栈顶插入新的栈顶元素e。

Pop(&

S,&

e)

删除S的栈顶元素,并以e返回其值。

}ADTStack

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

ADTQueue{

D={ai|ai∈ElemSet,I=1,2,......,n,n≥0}

ListInitiate(&

Q)

构造一个空队列Q。

StackEmpty(Q)

队列Q已经存在。

若队列Q为空栈,则返回TRUE,否则返回FALSE。

EnQueue(&

Q,e)

插入元素e为Q的新的队尾元素。

DeQueue(&

Q,&

删除Q的对头元素,并以e返回其值。

}ADTQueue

程序包含四个模块:

1)主程序模块:

Voidmain()

{

初始化;

For()

接受处理命令;

}

接受处理;

2)栈模块——实现栈的抽象数据类型;

3)队列模块——实现队列的抽象数据类型。

4)魔王语言解释模块——定义线性表的结点结构。

各模块的之间的调用关系如下:

主程序模块

魔王语言解释模块

栈模块

队列模块

三、详细设计

1.栈类型

structStack

char*base;

char*top;

intstacksize;

};

2.队列类型

structStack

structLinkQueue

structQueue*front;

structQueue*rear;

3.栈的基本操作

//构造栈

voidInitStack(structStack&

s)

s.base=(char*)malloc(STACK_INIT_SIZE*sizeof(char));

s.top=s.base;

s.stacksize=STACK_INIT_SIZE;

//往栈中压入元素

voidPush(structStack&

s,chare)

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;

}

*(s.top)=e;

s.top++;

//取出栈中的元素

voidPop(structStack&

s,char&

e)

e=*--s.top;

//判断栈是否为空

intStackEmpty(structStacks)

if(s.top==s.base)return1;

elsereturn0;

//清空栈

voidClearStack(structStack&

s)

4队列的基本操作

//构造队列

voidInitQueue(structLinkQueue&

q)

q.front=q.rear=(structQueue*)malloc(sizeof(structQueue));

q.front->

next=NULL;

//元素入队

voidEnQueue(structLinkQueue&

q,chare)

structQueue*p;

p=(structQueue*)malloc(sizeof(structQueue));

p->

data=e;

q.rear->

next=p;

q.rear=p;

//元素出队

voidDeQueue(structLinkQueue&

q,char&

e){

p=q.front->

next;

e=p->

data;

next=p->

if(q.rear==p)q.rear=q.front;

free(p);

//判断队列是否为空,如果对为空,返回,否则返回

intQueueEmpty(structLinkQueueq){

if(q.front==q.rear)return1;

//把字符数组从右至左压入栈中

voidInStack(char*ch,structStack&

{

inti,L=0;

while(ch[L]!

='

\0'

)L++;

for(i=L-1;

i>

=0;

i--)Push(s,ch[i]);

}

4.主函数和其他函数的算法(含注释):

#include<

stdio.h>

stdlib.h>

#defineSTACK_INIT_SIZE100

#defineSTACK_INCREMENT10

intmain()

printf("

**************************************************************\n"

);

******************************\n"

**魔王语言解释系统**\n"

*班级:

统计2011级*\n"

*姓名:

陈枫*\n"

*学号:

201101051304*\n"

**************************************************************\n\n"

intxunhuan=1;

printf("

请输入你想要解释的魔王语言:

\n"

while(xunhuan==1)//一个总循环控制整个程序的重复进行

charA[]="

sae"

;

//大写字母作为字符数组名存放小写字母

charB[]="

tsaedsae"

charflag='

0'

//flag用来标记处理括号

chare1,key,e2,e;

intmark=1;

//标记输入的魔王语言是否在允许的范围之内

intf=1;

//判断括号是否匹配

charMoWang[100]="

\0"

//定义一个魔王变量,存放待解释的语言字符

structStackS;

//作为栈存储元素,为后续操作和输出做准备

structStacktemp;

//用来处理括号外的元素

InitStack(S);

InitStack(temp);

structLinkQueueQ;

InitQueue(Q);

gets(MoWang);

//变量MoWang存储输入的语言

InStack(MoWang,S);

//把要解释的魔王语言压入栈中

while(!

StackEmpty(S))//把魔王语言进行出栈,不符合语言的进行提示

{

Pop(S,e1);

if(e1=='

('

{

if(StackEmpty(S))

{

魔王语言错误!

mark=0;

f=0;

break;

}

StackEmpty(S))

{

)'

{

f=1;

}

elseif(!

(e1>

a'

&

e1<

z'

)&

!

A'

Z'

))

魔王语言错误!

}

if(mark==0)

if(f!

=1)

}

elseif(e1=='

))

if(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1