魔王语言解释大数据结构课程设计报告材料docWord格式.docx

上传人:b****1 文档编号:14233065 上传时间:2022-10-20 格式:DOCX 页数:23 大小:172.82KB
下载 相关 举报
魔王语言解释大数据结构课程设计报告材料docWord格式.docx_第1页
第1页 / 共23页
魔王语言解释大数据结构课程设计报告材料docWord格式.docx_第2页
第2页 / 共23页
魔王语言解释大数据结构课程设计报告材料docWord格式.docx_第3页
第3页 / 共23页
魔王语言解释大数据结构课程设计报告材料docWord格式.docx_第4页
第4页 / 共23页
魔王语言解释大数据结构课程设计报告材料docWord格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

魔王语言解释大数据结构课程设计报告材料docWord格式.docx

《魔王语言解释大数据结构课程设计报告材料docWord格式.docx》由会员分享,可在线阅读,更多相关《魔王语言解释大数据结构课程设计报告材料docWord格式.docx(23页珍藏版)》请在冰豆网上搜索。

魔王语言解释大数据结构课程设计报告材料docWord格式.docx

n

h

一只

4.实现提示

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

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

5.本程序采用的是顺序栈。

基本操作列表:

(1)据括号的个数设一个标记。

记下括号的位置。

(2)根据标记来执行依次的操作。

(3)没有括号,直接进队,据翻译函数2输出人的语言。

(4)有括号,分为括号的和括号外的。

,根据括号的位置:

括号外的从右到左入栈;

括号的从左到右入栈,并且依次插入括号的第一个字符。

据翻译函数2出栈并且翻译。

二、需求分析

1.本演示程序中,魔王语言限制在小写字母‘a’-‘z’之间,且必须限制在括号以及大写字母A和B。

且允许出现重复字符或非法字符,程序运用时自动过滤去,输出的运算结果中将不含重复字符和非法字符。

2.魔王语言遵守如下规则:

(θδ1δ2δ3…δn)→θδnθδn-1…θδ1θ

B→tAdAA→sae

3.演示程序以用户和计算机对话的形式进行,即在计算机终端中显示提示信息之后,有用户自行选择下一步命令,相应输入数据和运算结果在其后显示。

4.程序的执行命令有:

1)选择操作2)任意键结束

5.数据测试

B(ehnxgz)B解释成:

tsaedsaeezegexenehetsaedsae

若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是:

三、概要设计

为实现上述功能,需要栈和队列两个抽象数据类型。

1.栈抽象数据类型定义

ADTstack{

数据对象:

D={ai|ai∈Elemset,i=1,2,3,…n,n>

=0}

数据关系:

R1={<

ai-1,ai>

|ai-1,ai∈D,i=2,…n}

基本操作:

InitStack(&

s)

操作结果:

构造一个空栈s。

Push(&

s,e)

初始条件:

栈s已存在。

插入元素e为新的栈顶元素。

Pop(&

s,&

e)

栈s已存在且非空。

删除栈s的栈顶元素,并用e返回其值。

StackLenth(&

返回s的元素个数,即栈的长度。

ClearStack(&

将s清为空栈。

DestoryStack(&

栈s被销毁。

StackEmpty(&

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

Traverse(&

s,void(*visit)())

依次遍历栈s中的元素,依次调用函数,一旦失败,则操作失败。

}ADTstack

2.队列抽象数据类型定义

ADTQueue{

InitQueue(&

q)

构造一个空队列Q。

EnQueue(&

q,e)

队列Q已存在。

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

QueueLenth(&

队列已存在。

返回Q的元素个数,即队列的长度。

DeQueue(&

q,&

删除Q的队尾元素,并用e返回其值。

QueueEmpty(&

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

ClearQueue(&

清空队列Q。

DestoryQueue(&

队列Q被销毁。

不再存在。

QueueTraverse(&

q,Status(*visit)())

依次遍历队列Q的元素,依次调用函数,一旦失败,则操作失败。

}ADTQueue

流程图如下:

本程序主要包括以下几个模块:

主程序模块:

intmain()

{

GhostLanage();

printf("

\n\t按任意键退出\n\n"

);

}

各子程序模块:

/*初始化栈*/voidInitStack(SeqStack*s)

{s->

top=-1;

/*进栈操作*/

voidPush(SeqStack*s,StackElementTypex)

{if(s->

top==Stack_Size-1)

printf("

\n\t栈已满!

"

else{s->

top++;

s->

elem[s->

top]=x;

/*出栈操作*/

voidPop(SeqStack*s,StackElementType*x)

top==-1)

\n\t栈为空!

else{*x=s->

top];

top--;

/*取栈顶元素*/

voidGetTop(SeqStack*s,StackElementType*x)

else*x=s->

/*判断栈是否为空*/

intIsEmpty(SeqStack*s)

top==-1)return(0);

elsereturn

(1);

/*魔王语言翻译函数*/

voidGhostLanage()

{SeqStackB,A,s,B1,A1,r,M;

StackElementTypech,ch1,ch2,x;

charaa[100];

intchoice,i=0,n;

B);

A);

s);

r);

M);

魔王语言的转换形式:

B->

tAdAA->

sae"

B,'

t'

A'

d'

A,'

s'

a'

e'

\n请输入要翻译的魔王语言:

\n"

scanf("

%s"

aa);

for(i=0;

aa[i]!

='

\0'

;

i++)

s,aa[i]);

while(IsEmpty(&

s))

{Pop(&

s,&

ch);

if(ch=='

B'

{B1=B;

while(IsEmpty(&

B1))

{Pop(&

B1,&

ch1);

if(ch1=='

{A1=A;

A1))

A1,&

ch2);

Push(&

r,ch2);

}

elsePush(&

r,ch1);

elseif(ch=='

)'

while(ch2!

('

{Push(&

M,ch2);

Pop(&

GetTop(&

M,&

x=ch2;

M))

r,x);

r,ch);

M=r;

\n\n\t翻译的结果为:

%c"

ch);

\n\n\t是否继续翻译为汉语:

(1-继续,0-不继续)"

%d"

&

n);

if(n==1)

{printf("

\n\n\t翻译为汉语的结果为:

\n\n\t"

M=r;

)printf("

天"

地"

上"

一只"

鹅"

z'

追"

g'

赶"

x'

下"

n'

蛋"

h'

恨"

else;

模块间的关系是:

主程序

翻译函数1

翻译函数2

栈模块

 

四、详细设计

本程序中的主要函数有:

voidInitStack(SeqStack*s);

/*初始化栈*/

voidPush(SeqStack*s,StackElementTypex);

/*进栈操作*/

voidPop(SeqStack*s,StackElementType*x);

voidGetTop(SeqStack*s,StackElementType*x);

intIsEmpty(SeqStack*s);

voidGhostLanage();

函数间的调用关系:

主程序调用魔王语言翻译函数,然后魔王语言翻译函数调用其它的函数(初始化栈,

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

当前位置:首页 > 工程科技 > 建筑土木

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

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