您好,欢迎访问三七文档
数据结构实验报告(魔王语言)一、【实验构思(Conceive)】(10%)(本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识)魔王语言的解释规则:大写字母表示魔王语言的词汇,小写字母表示人的词汇语言,魔王语言中可以包含括号,魔王语言的产生式规则在程序中给定,当接收用户输入的合法的魔王语言时,通过调用魔王语言翻译函数来实现翻译。二、【实验设计(Design)】(20%)(本部分应包括:抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系)抽象数据类型:typedefstruct{StackElementTypeelem[Stack_Size];inttop;}SeqStack;主程序模块: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){if(s-top==-1)printf(\n\t栈为空!);else{*x=s-elem[s-top];s-top--;}}/*取栈顶元素*/voidGetTop(SeqStack*s,StackElementType*x){if(s-top==-1)printf(\n\t栈为空!);else*x=s-elem[s-top];}/*判断栈是否为空*/intIsEmpty(SeqStack*s){if(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;InitStack(&B);InitStack(&A);InitStack(&s);InitStack(&r);InitStack(&M);printf(魔王语言的转换形式:B-tAdAA-sae);Push(&B,'t');Push(&B,'A');Push(&B,'d');Push(&B,'A');Push(&A,'s');Push(&A,'a');Push(&A,'e');printf(\n请输入要翻译的魔王语言:\n);scanf(%s,aa);for(i=0;aa[i]!='\0';i++)Push(&s,aa[i]);while(IsEmpty(&s)){Pop(&s,&ch);if(ch=='B'){B1=B;while(IsEmpty(&B1)){Pop(&B1,&ch1);if(ch1=='A'){A1=A;while(IsEmpty(&A1)){Pop(&A1,&ch2);Push(&r,ch2);}}elsePush(&r,ch1);}}elseif(ch=='A'){A1=A;while(IsEmpty(&A1)){Pop(&A1,&ch2);Push(&r,ch2);}}elseif(ch==')'){Pop(&s,&ch2);while(ch2!='('){Push(&M,ch2);Pop(&s,&ch2);}GetTop(&M,&ch2);x=ch2;Pop(&M,&ch2);while(IsEmpty(&M)){Push(&r,x);Pop(&M,&ch2);Push(&r,ch2);}Push(&r,x);}elsePush(&r,ch);}M=r;printf(\n\n\t翻译的结果为:);while(IsEmpty(&M)){Pop(&M,&ch);printf(%c,ch);}printf(\n\n\t是否继续翻译为汉语:(1-继续,0-不继续));scanf(%d,&n);if(n==1){printf(\n\n\t翻译为汉语的结果为:\n\n\t);M=r;while(IsEmpty(&M)){Pop(&M,&ch);if(ch=='t')printf(天);elseif(ch=='d')printf(地);elseif(ch=='s')printf(上);elseif(ch=='a')printf(一只);elseif(ch=='e')printf(鹅);elseif(ch=='z')printf(追);elseif(ch=='g')printf(赶);elseif(ch=='x')printf(下);elseif(ch=='n')printf(蛋);elseif(ch=='h')printf(恨);}printf(\n);}else;}三、【实现描述(Implement)】(30%)(本部分应包括:抽象数据类型具体实现的函数原型说明、关键操作实现的伪码算法、函数设计、函数间的调用关系,关键的程序流程图等,给出关键算法的时间复杂度分析。)voidInitStack(SeqStack*s);/*初始化栈*/voidPush(SeqStack*s,StackElementTypex);/*进栈操作*/voidPop(SeqStack*s,StackElementType*x);/*出栈操作*/voidGetTop(SeqStack*s,StackElementType*x);/*取栈顶元素*/intIsEmpty(SeqStack*s);/*判断栈是否为空*/voidGhostLanage();/*魔王语言翻译函数*/函数间的调用关系:主程序调用魔王语言翻译函数,然后魔王语言翻译函数调用其它的函数(初始化栈,进栈,出栈,取栈顶元素,判断栈空),以此来实现整个程序的运行。四、【测试结果(Testing)】(10%)(本部分应包括:对实验的测试结果,应具体列出每次测试所输入的数据以及输出的数据,并对测试结果进行分析总结)输入的魔王语言为:B(ehnxgz)B翻译的结果为:tsaedsaeezegexenehetsaedsae翻译为汉语的结果为:天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅结论:此程序能够按照给定的翻译规则解释魔王语言。四、【实验总结】(10%)(本部分应包括:自己在实验中完成的任务,注意组内的任意一位同学都必须独立完成至少一项接口的实现;对所完成实验的经验总结、心得)通过这个实验。特别是实验中对栈的应用,让我更深入的了解了栈的特性,更加了解了栈的构造及构造方法。这次实验实现了简单的魔王语言解释,按照给定的规则能够翻译出一句有意义的话,但不足的是,程序中的规则是指导书中给定的规则,没有定义出自己的规则,在今后的时间里,还需要自己进行不断的改善,争取能够自己定义规则。这次实验对魔王语言的解释,让我看到了如何对信息进行简单的加密,看到了加密的雏形,这对于今后更深入的学习起到了启蒙的作用。总的来说,这次实验让我收获了很多,同时也让我发现了很多的不足,希望在今后的学习中,不断努力,使程序更加的完美。五、【项目运作描述(Operate)】(10%)(本部分应包括:项目的成本效益分析,应用效果等的分析。)六、【代码】(10%)(本部分应包括:完整的代码及充分的注释。注意纸质的实验报告无需包括此部分。格式统一为,字体:Georgia,行距:固定行距12,字号:小五)#includestdio.h#defineStackElementTypechar#defineStack_Size100typedefstruct{StackElementTypeelem[Stack_Size];inttop;}SeqStack;voidInitStack(SeqStack*s);/*初始化栈*/voidPush(SeqStack*s,StackElementTypex);/*进栈操作*/voidPop(SeqStack*s,StackElementType*x);/*出栈操作*/voidGetTop(SeqStack*s,StackElementType*x);/*取栈顶元素*/intIsEmpty(SeqStack*s);/*判断栈是否为空*/voidGhostLanage();/*魔王语言翻译函数*//*主函数*/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){if(s-top==-1)printf(\n\t栈为空!);else{*x=s-elem[s-top];s-top--;}}/*取栈顶元素*/voidGetTop(SeqStack*s,StackElementType*x){if(s-top==-1)printf(\n\t栈为空!);else*x=s-elem[s-top];}/*判断栈是否为空*/intIsEmpty(SeqStack*s){if(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;InitStack(&B);InitStack(&A);InitStack(&s);InitStack(&r);InitStack(&M);printf(魔王语言的转换形式:B-tAdAA-sae);Push(&B,'t');Push(&B,'A');Push(&B,'d');Push(&B,'A');Push(&A,'s');Push(&A,'a');Push(&A,'e');printf(\n请输入要翻译的魔王语言:\n);scanf(%s,aa);for(i=0;aa[i]!='\0';i++)Push(&s,aa[i]);while(IsEmpty(&s)){Pop(&s,&ch);if(ch=='B'){B1=B;while(IsEmpty(&B1)){Pop(&B1,&ch1);if(ch1=='A'){A1=A;while(IsEmpty(&A1)){Pop(&A1,&ch2);Push(&r,ch2);}}elsePush(&r,ch1);}}elseif(ch=='A'){A1=A;while(IsEmpty(&A1)){Pop(&A1,&ch2);Push(&r,ch2);}}elseif(ch==')'){Pop(&s,&ch2);while(ch2!='('){Push(&M,ch2);Pop(&s,&ch2);}GetTop(&M,&ch2);x=ch2;Pop(&M,&ch2);while(IsEmpty(&M)){Push(&r,x);Pop(&M,&ch2);Push(&r,ch2);}Push(&r,x);}elsePush(&r,ch);}M=r;printf(\n\n\t翻译的结果为:);while(IsEmpty(&M)){Pop(&M,&ch);printf(%c,ch);}printf(\
本文标题:魔王语言实验报告
链接地址:https://www.777doc.com/doc-7256091 .html