魔王语言数据结构试验报告Word格式文档下载.docx
- 文档编号:15728256
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:21
- 大小:37.56KB
魔王语言数据结构试验报告Word格式文档下载.docx
《魔王语言数据结构试验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《魔王语言数据结构试验报告Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
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(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 魔王语言 数据结构试验报告 魔王 语言 数据结构 试验报告