数据结构课程设计报告整理表达式

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

数据结构课程设计报告题目:编程整理表达式方法班级:计算机092姓名:余海刚指导教师:董跃华,井福荣成绩:__________________________2011年6月16日1目录:摘要...........................................................21.引言………………………………………………………………..22.需求分析……………………………………………………………..33.概要设计……………………………………………………………..34.详细设计……………………………………………………………..65.测试结果…………………………………………………………...116.调试分析…………………………………………………………….137.设计体会…………………………………………………………….148.结束语……………………………………………………………….14附录……………………………………………………………………15参考文献摘要(题目)::键盘输入一个含有括号的四则运算表达式,可能含有多余的括号,编程整理该表达式,去掉所有多余的括号,原表达式中所有变量和运算符相对位置保持不变,并保持与原表达式等价1.引言栈,是硬件。主要作用表现为一种数据结构,是只能在某一端插入和删除的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个2数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为先进后出表。栈可以用来在函数调用的时候存储断点,做递归时要用到栈!文件是程序设计中的一个重要概念。所谓“文件”一般是指存储在外部介质上数据的集合。一批数据时以文件的形式存放在外部介质(如磁盘)上的。操作系统是以文件为单位对数据进行管理的,也就是说,如果想找存在外部介质上的数据,必须先按文件名找到所指定的文件,然后从该文件中读取数据。要向外部介质上存储数据也必须先建立一个文件(以文件名标识),才能向它输出数据。本报告中所设计的整理表达式,实现了以线性表结构的单向表表示商场所需求的功能,,将文件形式保存的数据恢复成线性表结构的单向表的流程中所需的功能。。2.需求分析输入字母和运算符号,输入数值也可以,但不好看,输出应输入对应。去掉所有多余的括号时,原表达式中所有变量和运算符相对位置保持不变,不能前移或是退后,并保持与原表达式等价。输入时也可以输入正确表达式。3.概要设计stdio.h、iostream.h、string.h、stdlib.h为包含的库函数除此之外还有结构体和宏定义的应用系统流程图见图34调用函数h;54、详细设计4.1引用库函数及变量的定义#includestdio.h/*标准输入/输出头文件*/#includeconio.h/*包含绘制图形函数等头文件*/#includestring.h/*包含字符串处理函数头文件*/#includestdlib.h/*包含动态存储与释放函数头文件*/#includeiostream#includestrong.cpp#defineMax100/*宏观定义栈的最大容量*/typedefstructstack/*栈结构定义*/{主函数main()主界面menu()函数kuanjia1()函数delayMS函数Zlbds函数gotoTextPos函数strans6chardata[Max];/*字符串定义,存储元素*/inttop;/*栈中指针,代表栈的长度*/}liststack;4.2输入算法的实现voidkuanjia1()//大框架{system(cls);printf(╔━━━━━━━━━━━━━━━━━━╗);printf(┃┃);printf(┃┃);printf(┃┃);printf(┃┃);printf(┃┃);printf(┃┃);printf(┃┃);printf(┃┃);printf(┃┃);printf(┃┃);printf(┃┃);printf(┃┃);printf(┃┃);printf(┃┃);printf(┃┃);printf(┃┃);printf(┃┃);printf(╚━━━━━━━━━━━━━━━━━━╝);gotoTextPos(4,2);printf(┏┓);gotoTextPos(4,3);printf(整理表达式);gotoTextPos(4,4);printf(┗┛);voidmenu()//主界面{kuanjia1();gotoTextPos(16,8);printf(1.Start);gotoTextPos(16,10);printf(2.Exit);gotoTextPos(2,14);printf(Pleaseinputyourchoice:);7}4.3输出算法的实现voidzlbds(){kuanjia1();gotoTextPos(2,7);printf(Inputtheprimerexpression:);gotoTextPos(2,8);charstr[Max],exp[Max],tran[Max];scanf(%s,str);strans(str,exp,tran);gotoTextPos(2,10);printf(初步整理表达式:%s,exp);gotoTextPos(2,12);printf(最终整理表达式:%s\n,tran);gotoTextPos(2,14);printf(Pressanykeytoreturn!);getch();menu();}intn;scanf(%d,&n);switch(n){case1:zlbds();break;case2:return;default:gotoTextPos(28,14);printf(Error!);gotoTextPos(2,16);printf(Pressanykeytotryagain!);getch();menu();}}}4.4算法voidstrans(charstr[],charexp[],chartran[])/*子函数,删除字符串中多余项*/{liststackop;/*定义一个栈*/inti=0,t=0,j=0,k=-1;8op.top=-1;/*栈的初始位置*/for(i=0;iMax;i++)/*把输入的字符串存储在栈中*/{op.top++;/*指针移动*/op.data[op.top]=str[i];/*第i个字符入栈*/}for(i=0;i=op.top;i++)/*从栈中查找元素*/{if(op.data[i]=='(')/*第i个元素若为“(”*/{if(op.data[i-1]=='*'||op.data[i-1]=='/')/*如若第i个元素之前有“*”或“/”.即“(”前面有*或/*/{exp[i]=op.data[i];/*那么把第i个元素存在此数组里,即初始整理结果的存储位置*/}elseif(i==0)/*如若第i个元素之前没有“*”或“/”,并且i=0*/{exp[i]=op.data[i];/*那么把第i个元素存在此数组里,也即初始整理结果的存储位置*/k=i;/*i的直赋给k,k用于记录当前记录位置*/}else/*i!=0*/{exp[i]=op.data[i];/*那么把第i个元素存在此数组里,也即初始整理结果的存储位置*/k=i;/*i的值赋给k,k用于记录当前记录位置*/}}elseif(op.data[i]==')')/*第i个元素如不为“(”,而为“)”*/{if(op.data[i+1]=='*'||op.data[i+1]=='/'||k==-1)/*如果“)”后有*或/*/9{exp[i]=op.data[i];/*那么把第i个元素存在此数组里,即初始整理结果的存储位置*/}elseif(i==op.top&&k==-1)/*“(”后面没有*或/,并且当前位置合法*/{exp[i]=op.data[i];/*那么把第i个元素存在此数组里,也即初始整理结果的存储位置*/}else/*当前位置不合法*/{exp[i]='';/*此数组存空*/exp[k]='';/*此数组存空*/k=-1;}}else/*第i各元素如若不为’(’,而不为“)”*/exp[i]=op.data[i];/*那么把第i个元素存在此数组里,也即初始整理结果的存储位置*/}exp[op.top+1]='\0';/*最后一个存/0*/while(exp[t]!='\0'){if(exp[t]!='')/*第t个元素不为空*/{tran[j]=exp[t];/*把它放在最终整理数组中*/t++;j++;}elseif(exp[t]==''&&t!=op.top)/*第t个元素为空,并且当前位置合法*/{tran[j]=exp[t+1];/*把下一个放在最终整理数组中*/t=t+2;j++;}else10break;/*跳出循环*/}}4.5主函数intmain(){system(modecon:cols=40lines=20);setConsoleTitle(整理表达式by余海刚);system(color0A);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);delayMS(600);gotoTextPos(24,9);printf(余);delayMS(600);gotoTextPos(26,9);printf(海);delayMS(600);gotoTextPos(28,9);printf(刚);delayMS(600);return0;}5、测试结果5.1输入界面115.2..1输出界面输入选择1的运行界面。见1.10图1.10输入程序的运行界面5.2.2输入选择2的运行界面。见125.2.3输入其它选择的运行界面。见136、调试分析编译时,发现有的括号可删可不删时,会自动删除,这样导致程序不够紧密。刚刚接到这个题目的时候,我发现用栈做会更加的减少时间复杂度和空间复杂度,从而更好的方便使用,于是我的一切出发点都是围绕方便使用者进行。程序的开始我使用的是宏定义,使程序更加的简洁明了,其中贯穿程序大部分的是字符串和数组。登陆界面其实是利用判断语句做的,后面的输入输出没有什么特别的,是按照一般线性表的输入输出做的,。除此之外,我还花了一部分时间到美化界面上,现在的界面是在我的能力范围之内最好的。7、设计体会通过这个星期的课程设计,我的收获还是不少的。刚开始看到这个课程设计题目的时候,我觉得很有信心,因为我认为我的数据结构和C语言中我最喜欢也是学的最好的地方就是线性,但是随着对这个题目的细细探索,我发现这题目还是有一定的难度的,越看我觉得越急躁,但是这样反而更加的阻碍我的思路,直到我碰到一个在C语言方面颇有心得的同学,他帮我解决了很多问题,更主要的是他让我明白了耐性在一个程序中的重要作用,现在,借着这里我想真诚的对他说一声“谢谢!”我一定会更加的努力培养我的耐性,让我的人生更加的美好而成功!数据结构的很多算法没能熟练的掌握,以致在调试的时候花了很长时间,而且程序不够工程化,功能不够完善。程序设计的过程中,代码的编写很不熟练,而且很容易犯一些低级的错误,如:语句后面的分号忽略了,括号不匹配等等。8、结束语该系统我主要做了三个功能选项,,一个主界面。解决了编程整理表达式问题,当然此系统也

1 / 22
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功