云南大学软件学院数据结构实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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%)

(本部分应包括:对实验的测试结果,应具体列出每次测试所输入的数据以及输出的数据,并对测试结果进行分析,可附截图)

相关文档
最新文档