欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    数据结构课程设计报告.docx

    • 资源ID:11364994       资源大小:104.14KB        全文页数:19页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构课程设计报告.docx

    1、数据结构课程设计报告计算机科学与信息工程学院数据结构课程设计设计题目:简单计算器 专 业 计算机软件 班 级 计软2班 小组成员 蔡松佐 陈吉院 王希 刘军 符锦柏 曾祖滨 刘一霖 指导教师 张显全 2010 年 12 月 25 日数据结构分工情况组长:蔡松佐组员:曾祖滨、陈吉院、符锦柏、刘军、刘一霖、王希王希:负责设计程序的整体框架(定义数据结构,编写主函数)评分:90分符锦柏:负责编写栈的代码评分:95分蔡松佐:负责编写计算算术表达式的代码评分:95分陈吉院:负责编写比较符号优先级的代码评分:90分曾祖滨:负责将所有代码整合成一个完整的程序评分:88分刘军:负责写实验报告评分:90分刘一霖

    2、:负责测试程序,看其是否具有良好的健壮性评分:88分简单计算器一 基本功能描述 简单的计算器的功能是对基本的加、减、乘、除、四则运算,可对输入的操作数,包括整数,小数等进行运算。二 设计思路 本程序主要是采用栈的理论知识,主要用到两个结构体栈,一个用来转化表达式,一个用来计算表达式。区别就在于一个存储字符,一个存储浮点。首先,用一个字符数组来存储用户输入的中缀表达式。然后用栈来把这个表达式转化为后缀表达式,转化时要进行符号优先级比较,这里将*/的优先级定为2,+-定为1,括号和=定为0。具体思想如下:例如用户输入了1+2*3=,将其存放入一个字符数组中。先在栈的底部存放一个=号符,用作符号优先

    3、级比较。首先将1存放到另外一个字符数组s1中,再将+号入栈。入栈的同时与底部的=比较优先级,+的优先级高于=,所以不出栈,之后将2存放入s2中,然后再将*入栈,入栈的同时与+比较符号优先级,*比+高,所以不出栈。再将3存入s2中。之后将栈中不是=的运算符都弹出栈,并依次存入s2中。所以s2中的表达式为123*+。之后进行计算,计算时用到浮点栈。首先将s2中的字符依次入栈,遇到运算符时进行计算。所以将123入栈后,再将*入栈的同时,将前面两个数字进行运算,算出结果为6并存入栈中,之后再将+入栈,再与1进行运算,结果即为7,然后输出结果。三 概要设计1,子函数功能struct Stack用来转化表

    4、达式的机构体栈。Struct FStack用来计算表达式的结构体栈void InitStack(Stack &s)初始化结构体栈void InitFStack(FStack &s)初始化结构体栈char GetTop(Stack s)获取栈顶数据void IncrementStackSize(Stack &s)为栈扩充ncrementsize个存储空间void IncrementFStackSize(FStack &s)为栈扩充ncrementsize个存储空间void Push(Stack &s,char e)第一个栈入栈操作void PushF(FStack &s,float e)第二个栈

    5、入栈操作bool Empty(Stack s)判断第一个栈是否为空。bool EmptyF(FStack s)判断第二个栈是否空char Pop(Stack &s)表达式出栈float PopF(FStack &s)计算的数据出栈int Precede(char op)确定优先级的函数void Change(char *s1,char *s2)改变两个字符串的储存位置float Compute(char *s2)实现数据的运算2 函数的调用 3 测试数据及测试结果(1)测试 1+2+3=6(2) 测试2*4=8(3)测试 3/2=1.5(4)测试(1+2)*3=9四 程序代码 #include

    6、 #include #include #include #include #include struct Stack /转换表达式 char *elem; int top; int stacksize; int incrementsize;struct FStack /计算 float *elem; int top; int stacksize; int incrementsize;void InitStack(Stack &s) s.elem=new char100; s.top=-1; s.stacksize=100; s.incrementsize=10;void InitFStack(

    7、FStack &s) s.elem=new float100; s.top=-1; s.stacksize=100; s.incrementsize=10;char GetTop(Stack s) return s.elems.top;void IncrementStackSize(Stack &s) char *a=new chars.stacksize+s.incrementsize; for(int i=0;i=s.top;i+) ai=s.elemi; delete s.elem; s.elem=a; s.stacksize+=s.incrementsize;void Incremen

    8、tFStackSize(FStack &s) float *a=new floats.stacksize+s.incrementsize; for(int i=0;i Precede(ch) /优先级()函数返回运算符形参的优先级 s2j+ = w; Pop(R); w = GetTop(R); Push(R,ch); ch = s1+i; else /此处为数字或小数点字符的处理 while (isdigit(ch) | ch = .) s2j+ = ch; ch = s1+i; s2j+ = ; /被转换后的每个数值后放一个空格 /- ch = Pop(R); while (ch != =

    9、) s2j+ = ch; ch = Pop(R); s2j+ = =; /加入字符串结束符 s2j+ = 0;float Compute(char *s2) FStack S; /用S栈存储操作数和中间计算结果 InitFStack(S); istrstream ins(s2); /把s2定义为输入字符串流对象ins char ch; /用于输入字符 float x; /用于输入浮点数 insch; while (ch != =) switch (ch) case +: x = PopF(S) + PopF(S); break; case -: x = PopF(S); x = PopF(S)

    10、 - x; break; case *: x = PopF(S) * PopF(S); break; case /: x = PopF(S); x = PopF(S) / x; break; default: ins.putback(ch); insx; PushF(S,x); insch; if (!EmptyF(S) x = PopF(S); if (EmptyF(S) /如果栈中只有一个值那一定是结果 return x; void main()/主程序 FStack s; char a10; float b,c; char str150,str250; /暂时存储表达式 char j=y

    11、; cout *欢迎使用本计算器*endlendl;haha: while(j=Y|j=y) int i=0,m=0,n=0,k=0,l=0,q=0,p=0; cout 请输入一个以=字符结束的中缀算术表达式:endlendl; cin.getline(str1,sizeof(str1); while(str1i!=0) i+; if(str1i-1!=) cout表达式错误.请重新输入.endlendl; goto haha; i=0; while(str1i!=0) if(str1i=0&str1i-1=/) cout表达式错误.请重新输入.endlendl; goto haha; i+;

    12、 i=0; while(str1i!=0) if(str1i=() m+; if(str1i=) n+; if(str1i=) k+; if(str1i=) l+; if(str1i=) q+; if(str1i=) p+; i+; if(m!=n | k!=l | q!=p) cout表达式错误.请重新输入.endlendl; goto haha; Change(str1,str2); /处理结果 coutn求值结果为: str1Compute(str2)endl; cout是否继续 :(Y/N)j; cin.getline(str1,2); coutendl *感谢使用本计算器*endl;

    13、五 课程设计总结1 收获 通过这次课程设计,更进一步了解了栈的原理和应用,同时也锻炼了数据结构在实际中的熟练运用。2 心得体会 在这次数据结构设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题要不断地更正以前的错误思维。通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。我觉得作为一名计科专业的学生,这次课程设计是很有意义的。更重要的是如何把自己平时所学的东西应用到实际中。虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着学习,渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。


    注意事项

    本文(数据结构课程设计报告.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开