魔王语言解释大数据结构课程设计报告材料docWord格式.docx
- 文档编号:14233065
- 上传时间:2022-10-20
- 格式:DOCX
- 页数:23
- 大小:172.82KB
魔王语言解释大数据结构课程设计报告材料docWord格式.docx
《魔王语言解释大数据结构课程设计报告材料docWord格式.docx》由会员分享,可在线阅读,更多相关《魔王语言解释大数据结构课程设计报告材料docWord格式.docx(23页珍藏版)》请在冰豆网上搜索。
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();
函数间的调用关系:
主程序调用魔王语言翻译函数,然后魔王语言翻译函数调用其它的函数(初始化栈,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 魔王 语言 解释 数据结构 课程设计 报告 材料 doc
![提示](https://static.bdocx.com/images/bang_tan.gif)