数据结构课程设计报告整理表达式_第1页
数据结构课程设计报告整理表达式_第2页
数据结构课程设计报告整理表达式_第3页
数据结构课程设计报告整理表达式_第4页
数据结构课程设计报告整理表达式_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据结构课程设计报告题目:编程整理表达式方法班 级: 计算机092 姓 名: 余海刚 指导教师: 董跃华 ,井福荣 成 绩:_ 2011年 6月 16日目录:摘 要21.引言 .22.需求分析.33.概要设计.34.详细设计.65.测试结果.116.调试分析.137.设计体会.148.结束语.14附录15参考文献摘要(题目)::键盘输入一个含有括号的四则运算表达式,可能含有多余的括号,编程整理该表达式,去掉所有多余的括号,原表达式中所有变量和运算符相对位置保持不变,并保持与原表达式等价1.引言栈,是硬件。主要作用表现为一种数据结构,是只能在某一端插入和删除的特殊线性表。它按照后进先出的原则存储

2、数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。 栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。 栈也称为先进后出表。 栈可以用来在函数调用的时候存储断点,做递归时要用到栈!文件是程序设计中的一个重要概念。所谓“文件”一般是指存储在外部介质上数据的集合。一批数据时以文件的形式存放在外部介质(如磁盘)上的。操作系统是以文件为单位对数据进行管理的,也

3、就是说,如果想找存在外部介质上的数据,必须先按文件名找到所指定的文件,然后从该文件中读取数据。要向外部介质上存储数据也必须先建立一个文件(以文件名标识),才能向它输出数据。本报告中所设计的整理表达式,实现了以线性表结构的单向表表示商场所需求的功能,将文件形式保存的数据恢复成线性表结构的单向表的流程中所需的功能。 2.需求分析输入字母和运算符号,输入数值也可以,但不好看,输出应输入对应。去掉所有多余的括号时,原表达式中所有变量和运算符相对位置保持不变,不能前移或是退后,并保持与原表达式等价。输入时也可以输入正确表达式。3.概要设计<stdio.h>、< iostream.h&g

4、t;、<string.h>、<stdlib.h> 为包含的库函数 除此之外还有结构体和宏定义的应用系统流程图见图 调用函数h;主函数main()主界面menu()函数kuanjia1()函数delayMS函数Zlbds函数gotoTextPos函数strans4、详细设计4.1引用库函数及变量的定义 #include<stdio.h> /*标准输入/输出头文件*/#include<conio.h> /*包含绘制图形函数等头文件*/#include<string.h> /*包含字符串处理函数头文件*/#include<stdlib

5、.h> /*包含动态存储与释放函数头文件*/#include <iostream> #include <strong.cpp> #define Max 100 /*宏观定义栈的最大容量*/typedef struct stack /*栈结构定义*/ char dataMax; /*字符串定义,存储元素*/int top; /*栈中指针,代表栈的长度*/liststack; 4.2 输入算法的实现void kuanjia1() /大框架 system("cls"); printf(""); printf(" &quo

6、t;); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "

7、;); printf(" "); printf(" "); printf(" "); printf(""); gotoTextPos(4,2); printf(" "); gotoTextPos(4,3); printf(" 整 理 表 达 式"); gotoTextPos(4,4);printf(" ");void menu() /主界面 kuanjia1(); gotoTextPos(16,8); printf("1.Start")

8、; gotoTextPos(16,10); printf("2.Exit"); gotoTextPos(2,14); printf("Please input your choice: ");4.3输出算法的实现void zlbds() kuanjia1(); gotoTextPos(2,7); printf("Input the primer expression:"); gotoTextPos(2,8); char strMax,expMax,tranMax; scanf("%s",str); strans(s

9、tr,exp,tran); gotoTextPos(2,10); printf("初步整理表达式:%s",exp); gotoTextPos(2,12); printf("最终整理表达式:%sn",tran); gotoTextPos(2,14); printf(" Press any key to return!"); getch();menu();int n; scanf("%d",&n); switch(n) case 1:zlbds();break; case 2:return ; default:

10、gotoTextPos(28,14);printf("Error!"); gotoTextPos(2,16);printf(" Press any key to try again!"); getch(); menu(); 4.4 算法void strans(char str,char exp,char tran) /*子函数,删除字符串中多余项*/ liststack op; /*定义一个栈*/ int i=0,t=0,j=0,k=-1; op.top=-1; /*栈的初始位置*/ for(i=0;i<Max;i+) /*把输入的字符串存储在栈中

11、*/ op.top+; /*指针移动*/ op.dataop.top=stri; /*第i个字符入栈*/ for(i=0;i<=op.top;i+) /*从栈中查找元素*/ if(op.datai='(') /*第i个元素若为“(”*/ if(op.datai-1='*'|op.datai-1='/') /*如若第i个元素之前有“*”或“/”.即“(”前面有*或/*/ expi=op.datai; /*那么把第i个元素存在此数组里,即初始整理结果的存储位置*/ else if(i=0) /*如若第i个元素之前没有“*”或“/”,并且i=0*

12、/ expi=op.datai; /*那么把第i个元素存在此数组里,也即初始整理结果的存储位置*/ k=i; /*i的直赋给k,k用于记录当前记录位置*/ else /*i!=0*/ expi=op.datai;/*那么把第i个元素存在此数组里,也即初始整理结果的存储位置*/ k=i; /*i的值赋给k,k用于记录当前记录位置*/ else if(op.datai=')') /*第i个元素如不为“(”,而为“)”*/ if(op.datai+1='*'|op.datai+1='/'|k=-1) /*如果“)”后有*或/*/ expi=op.dat

13、ai; /*那么把第i个元素存在此数组里,即初始整理结果的存储位置*/ else if(i=op.top&&k=-1) /*“(”后面没有*或/ ,并且当前位置合法*/ expi=op.datai; /*那么把第i个元素存在此数组里,也即初始整理结果的存储位置*/ else /*当前位置不合法*/ expi=' ' /*此数组存空*/ expk=' ' /*此数组存空*/ k=-1; else /*第i各元素如若不为(,而不为“)”*/ expi=op.datai; /*那么把第i个元素存在此数组里,也即初始整理结果的存储位置*/ expop.t

14、op+1='0' /*最后一个存/0*/ while(expt!='0') if(expt!=' ') /*第t个元素不为空*/ tranj=expt; /*把它放在最终整理数组中*/ t+; j+; else if(expt=' '&&t!=op.top) /*第t个元素为空 ,并且当前位置合法*/ tranj=expt+1; /*把下一个放在最终整理数组中*/ t=t+2; j+; else break; /*跳出循环*/ 4.5主函数int main() system("mode con:cols=

15、40 lines=20"); setConsoleTitle("整理表达式 by余海刚"); system("color 0A"); menu(); kuanjia1(); gotoTextPos(10,7); printf("拜"); delayMS(600); gotoTextPos(19,7); printf("拜"); delayMS(600); gotoTextPos(20,9); printf("b"); delayMS(600); gotoTextPos(21,9); p

16、rintf("y"); delayMS(600); gotoTextPos(24,9); printf("余"); delayMS(600); gotoTextPos(26,9); printf("海"); delayMS(600); gotoTextPos(28,9); printf("刚"); delayMS(600); return 0; 5、 测试结果 5.1输入界面 5.2.1输出界面 输入选择1的运行界面。见1.10 图 1.10 输入程序的运行界面 5.2.2输入选择2的运行界面。见 5.2.3输入其

17、它选择的运行界面。见 6、 调试分析 编译时,发现有的括号可删可不删时,会自动删除,这样导致程序不够紧密。刚刚接到这个题目的时候,我发现用栈做会更加的减少时间复杂度和空间复杂度,从而更好的方便使用,于是我的一切出发点都是围绕方便使用者进行。程序的开始我使用的是宏定义,使程序更加的简洁明了,其中贯穿程序大部分的是字符串和数组。登陆界面其实是利用判断语句做的,后面的输入输出没有什么特别的,是按照一般线性表的输入输出做的,。除此之外,我还花了一部分时间到美化界面上,现在的界面是在我的能力范围之内最好的。7、 设计体会通过这个星期的课程设计,我的收获还是不少的。刚开始看到这个课程设计题目的时候,我觉得

18、很有信心,因为我认为我的数据结构和C语言中我最喜欢也是学的最好的地方就是线性,但是随着对这个题目的细细探索,我发现这题目还是有一定的难度的,越看我觉得越急躁,但是这样反而更加的阻碍我的思路,直到我碰到一个在C语言方面颇有心得的同学,他帮我解决了很多问题,更主要的是他让我明白了耐性在一个程序中的重要作用,现在,借着这里我想真诚的对他说一声“谢谢!”我一定会更加的努力培养我的耐性,让我的人生更加的美好而成功!数据结构的很多算法没能熟练的掌握,以致在调试的时候花了很长时间,而且程序不够工程化,功能不够完善。程序设计的过程中,代码的编写很不熟练,而且很容易犯一些低级的错误,如:语句后面的分号忽略了,括

19、号不匹配等等。8、 结束语该系统我主要做了三个功能选项,,一个主界面。解决了编程整理表达式问题,当然此系统也可应用到其它表达式系统。它是利用了C语言实现的。此系统的作界面,操作员可以对某个指定的库存文件进行选择,文件名自定。非常感谢老师对我的教导。参考文献 1 严蔚敏 吴伟名 编著,数据结构, 清华大学出版社, 2001年1月 2 谭浩强 编著, C程序设计(第三版) ,新世纪计算机基础教育丛书 清华大学出版社 ,2005年7月第三版3张颖江,胡燕。c语言程序设计M。北京:科学出版社。1985年。4 裔红艳 数据结构课程设计报告 , 计算机师范 5 知道 6 李春葆 编著,数据结构习题与解析(

20、第三版),清华大学出版社,2006年10月20附录:#include<stdio.h>#include<stdlib.h>#include<iostream>#include<string.h>#include<conio.h>#include "strong.cpp"#define Max 100void menu();typedef struct stack char dataMax; int top;liststack;void kuanjia1() /大框架 system("cls");

21、 printf(""); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(" "); p

22、rintf(" "); printf(" "); printf(" "); printf(" "); printf(" "); printf(""); gotoTextPos(4,2); printf(" "); gotoTextPos(4,3); printf(" 整 理 表 达 式"); gotoTextPos(4,4); printf(" ");void strans(char str,char exp,cha

23、r tran) liststack s; int i=0,t=0,j=0,k=-1; s.top=-1; for(i=0;i<Max;i+) s.top+; s.datas.top=stri; for(i=0;i<=s.top;i+) if(s.datai='(') if(s.datai-1='*'|s.datai-1='/') expi=s.datai; else if(i=0) expi=s.datai; k=i; else expi=s.datai; k=i; else if(s.datai=')') if(s.

24、datai+1='*'|s.datai+1='/'|k=-1) expi=s.datai; else if(i=s.top&&k=-1) expi=s.datai; else expi=' ' expk=' ' k=-1; else expi=s.datai; exps.top+1='0' while(expt!='0') if(expt!=' ') tranj=expt; t+; j+; else if(expt=' '&&t!=s.

25、top) tranj=expt+1; t=t+2; j+; else break; void zlbds() kuanjia1(); gotoTextPos(2,7); printf("Input the primer expression:"); gotoTextPos(2,8); char strMax,expMax,tranMax; scanf("%s",str); strans(str,exp,tran); gotoTextPos(2,10); printf("初步整理表达式:%s",exp); gotoTextPos(2,1

26、2); printf("最终整理表达式:%sn",tran); gotoTextPos(2,14); printf(" Press any key to return!"); getch(); menu();void menu() /主界面 kuanjia1(); gotoTextPos(16,8); printf("1.Start"); gotoTextPos(16,10); printf("2.Exit"); gotoTextPos(2,14); printf("Please input your c

27、hoice: "); int n; scanf("%d",&n); switch(n) case 1:zlbds();break; case 2:return ; default:gotoTextPos(28,14);printf("Error!"); gotoTextPos(2,16);printf(" Press any key to try again!"); getch(); menu(); int main() system("mode con:cols=40 lines=20"); s

28、etConsoleTitle("整理表达式 by余海刚"); system("color 0A"); menu(); kuanjia1(); gotoTextPos(10,7); printf("拜"); delayMS(600); gotoTextPos(19,7); printf("拜"); delayMS(600); gotoTextPos(20,9); printf("b"); delayMS(600); gotoTextPos(21,9); printf("y");

29、 delayMS(600); gotoTextPos(24,9); printf("余"); delayMS(600); gotoTextPos(26,9); printf("海"); delayMS(600); gotoTextPos(28,9); printf("刚"); delayMS(600); return 0; #include "pcc32.h"void delayMS(uint32 d)Sleep(d);return ;void clearText(void)system("cls&quo

30、t;);return ;int setTextColor(uint8 fColor)HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_SCREEN_BUFFER_INFO csbInfo;GetConsoleScreenBufferInfo(hd, &csbInfo);return SetConsoleTextAttribute(hd, fColor | (csbInfo.wAttributes&0x0F);PCCOLOR getTextColor(void)CONSOLE_SCREEN_BUFFER_INFO csbInf

31、o;GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbInfo);return (PCCOLOR)(csbInfo.wAttributes&0x0F);int setBackColor(uint8 bColor)HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_SCREEN_BUFFER_INFO csbInfo;GetConsoleScreenBufferInfo(hd, &csbInfo);return SetConsoleTextAt

32、tribute(hd, (bColor << 4) | (csbInfo.wAttributes&0xF0);PCCOLOR getBackColor(void)CONSOLE_SCREEN_BUFFER_INFO csbInfo;GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbInfo);return (PCCOLOR)(csbInfo.wAttributes&0xF0) >> 4);int setColors(uint8 fColor, uint8 bColor)

33、HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_SCREEN_BUFFER_INFO csbInfo;GetConsoleScreenBufferInfo(hd, &csbInfo);return SetConsoleTextAttribute(hd, fColor | (bColor << 4) | (csbInfo.wAttributes&0xFF);int setS(bool b)HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_SCREEN_BUFF

34、ER_INFO csbInfo;GetConsoleScreenBufferInfo(hd, &csbInfo);if (!b)return SetConsoleTextAttribute(hd, csbInfo.wAttributes | 0x4000);elsereturn SetConsoleTextAttribute(hd, csbInfo.wAttributes & 0x4000);int setUnderLine(bool b)HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_SCREEN_BUFFER_INFO csbInfo;GetConsoleScreenBufferInfo(hd, &csbInfo);if (!b)return SetConsoleTextAttribute(hd, csbInfo.wAttributes | 0x8000);elsereturn SetConsoleTextAttribute(hd, csbInfo.wAttributes & 0x8000);uint8 getLineWid

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论