(精选)云南大学软件学院数据结构实验3
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验难度: 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)//或得栈顶
int IsEmpty_SqStack(SqStack s)//判断是否空栈
void Init_SqQueue(SqQueue &q)//初始化
void En_SqQueue(SqQueue &q, char c)//进队列
int De_SqQueue(SqQueue &q, char &e) //出队列
void Translate(char c) //打印字符
void Reverse(char str[],char strtmp[])//将字符串反向
int Execute(char ch[], SqStack &s, SqQueue &q)//魔王语言操作
调用关系:
三、【实现(Implement)】(30%)
(本部分应包括:抽象数据类型各操作的具体实现代码、关键操作的具体算法实现、函数实现,主程序实现等,并给出关键算法的时间复杂度分析。如有界面则需包括界面的关键实现方法等。)
主程序模块:
int main()
{
char ch[100];
char ch1[100];
char ch2[100];
char e;
//********************************************************英文解密
printf("请输入魔王语言:");
gets(ch);
SqStack s;
SqQueue q;
Init_SqStack(s);
Init_SqQueue(q);
if(Execute(ch,s,q) == 1)
{
while(De_SqQueue(q,e) == 1)
{
Translate(e);
}
}
else
printf("输入的括号不匹配!"); //左括号比右括号多,不匹配
//********************************************************中文解密
printf("\n");
printf("请输入魔王语言:");
gets(ch1);
Init_SqStack(s);
Init_SqQueue(q);
Reverse(ch1,ch2);
{
for(int i=0;ch2[i]!='\0';i++)
Push_SqStack(s,ch2[i]);
while(Pop_SqStack(s,e) == 1)
{
switch(e)
{
case'w':
printf("我");
break;
case'a':
printf("爱");
break;
case's':
printf("数据");
break;
case'j':
printf("结");
break;
case'g':
printf("构");
break;
}
}
}
return 0;
}
其他函数实现代码见七、【代码】部分。
时间复杂复分析:o(n)。
四、【测试结果(Testing)】(10%)
(本部分应包括:对实验的测试结果,应具体列出每次测试所输入的数据以及输出的数据,并对测试结果进行分析,可附截图)