好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

数据结构课程设计报告魔王语言实验报告.doc

21页
  • 卖家[上传人]:人***
  • 文档编号:390502641
  • 上传时间:2023-09-20
  • 文档格式:DOC
  • 文档大小:384.12KB
  • / 21 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 西安郵電學院数据结构课程设计报告 题 目: 魔王语言院系名称: 计算机学院 专业名称: 软件工程 班 级: 学生姓名: 学号(8位): 指导教师: 设计起止时间:一. 设计目的1、 熟悉链表、队列、栈、排序、查找、文件等内容的的使用2、 将数据结构的内容结合到一起使用3、 熟悉掌握数据结构的内容4、了解递归与非递归的使用二. 设计内容以栈和队列为数据结构,使用文件读写、查找等操作,完成对魔王语言的解释三.概要设计 开始1.功能模块图; 主函数 结束将结果保存到文件中将魔王语言翻译为汉语意思将魔王的话转化成小写字母 将栈中的元素存入数组中读取文件mean.txt读取文件rule.txt 调用取括号函数 输入魔王说的话2. 各个模块详细的功能描述1. 入栈操作函数 int push(Stack *s,char x) 讲传递过来的字符入栈;2. 出栈操作char pop(Stack *s) 将当前栈顶的字符出栈,并将其返回;3. 入队操作函数int queue_in(Queue *p,char ch) 将传递过来的ch中的字符入队;4. 出队操作char queue_out(Queue *p) 将当前队头的字符出队,并将其返回;5. 去除魔王语言中括号模块void deletenode(Stack *s,Queue *r,char a[],int i) 利用队栈的进栈出栈操作,入队出队操作,将魔王语言中的括号去除,使之成为一个字母的序列; 6 .文件读取函数void read_file() ,void word_file()通过文件函数,读取rule和mean文件,并将其输出到终端;7. 将栈中的元素存入数组中void store(char a[],Stack *s) 将栈中的元素按次序存入到数组中;8. 魔王语言转字母语言void change(char a[])将输入的魔王语言通过循环判断转换成字母语言;9 .将字母语言翻译为人类语言void translate(char a[],struct Word *h) 将已经由魔王语言转换成的字母语言通过对照转换成人类语言10. 文件保存函数void save_file(struct Word *h) 将已经转换好的魔王语言保存到自定义路径。

      四.详细设计main函数1.功能函数的调用关系图 将结果存文件魔王的话转化成小写从件中读入规则解释为汉意显示从文件中读入汉意调用取括号函数读入魔王所说的话2.各功能函数的数据流程图(1)取括号函数deletenode(&s,&r,a,i);入A栈入F栈入目的队列结束将处理结果放回栈一层处理一层括号右括号左括号后非第一个字母左括号后第一个字母括号中内容从Q中弹出一个元素Q是否为空定义变量,初始化栈以及队列开始 流程图: Y N是否为括号中内容 N Y将处理结果放回队列 Y N(2)转化成小写字母函数change(a); 流程图:queue是否为空定义变量,初始化栈以及队列开始 Y N从队列Q中弹出元素放于data中Data为大写字母 N调用的函数执行递归 Y入队列Q结束开始(3)翻译为汉语意思函数translate(a,l); 初始化规则内容存在 N大写字母所对应的规则内容放于数组str中 Y Str[i]大写 Y 入队列Q,i++ NStr[i]存在 Y结束 N (4) 读大小写对应规则void read_file(); 流程图:开始 打开文件rule.txt打开文件失败 Y从文件中读取信息 N文件结束 Y 保存链表 N 关闭文件结束 开始 (5) 将字母与汉字相匹配流程图开始 初始化dataQ是否为空 Y N弹出对头元素data查找data对应的汉字汉字保存到文件result.txt中结束1. 重点设计及编码 1. 去括号函数deletenode(&s,&r,a,i);void deletenode(Stack *s,Queue *r,char a[],int i){ int j,flag; char ch,t; while(i>=0) { while(i>=0) { if(a[i]!='(')//用ASCII码比较,判断a[i]是否为'(' { push(s,a[i]); i=i-1; } else { i=i-1; break; } } j=0;flag=0; for(j=0;j<=s->top;j++) if(s->elem[j]==')') flag++; if(flag) { while(s->top+1&&s->elem[s->top]!=')') { ch=pop(s); queue_in(r,ch); } if(s->elem[s->top]==')') pop(s); if(r->rear!=r->front) { ch=queue_out(r); while(r->front!=r->rear) { push(s,ch); t=queue_out(r); push(s,t); } push(s,ch); } } } i=s->top; while(i+1) { printf("%c",s->elem[i]); i--; } } 2 转化成小写字母函数change(a);void change(char a[]){ char b[100]; int flag=0; int i,j,k,n; i=j=k=0; b[0]='\0'; while(a[i])//判断是否有大写字母 { if(a[i]>='A'&&a[i]<='Z') flag=1; i++; } if(flag==0) return; i=0; while(a[i]) { if(a[i]>='a'&&a[i]<='z') { b[j++]=a[i++]; b[j]='\0'; } else { while(a[i]!=xx[k].l[0]) k++; n=strlen(xx[k].r); strcat(b,xx[k].r); j+=n; i++; k=0; } } strcpy(a,b); a[j]='\0'; change(a);}3翻译为汉语意思函数translate(a,l);void translate(char a[],struct Word *h){ struct Word *m,*n; int i,k; i=k=0; n=h; while(a[i]) { m=(struct Word *)malloc(sizeof(struct Word)); m->data=a[i]; m->word[0]='\0'; while(a[i]!=yy[k].l[0]) k++; strcat(m->word,yy[k].r); m->next=NULL; k=0; i++; n->next=m; n=m; } for(m=h->next;m;m=m->。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.