ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:97.90KB ,
资源ID:7473187      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7473187.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机基础算法实验.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机基础算法实验.docx

1、计算机基础算法实验计算机基础算法实验班级:学号:姓名:完成日期:算法1 实现两个整数相加1 需求分析课程设计任务是用链表(单链表或双向链表)实现任意位数的整数相加。输入的形式和输入值的范围:长度不超过一百位的整数。输出的形式:有中文提示,分三行输出。2 概要设计LNode *CreatList()操作结果:构造一个链表.LNode Add(LNode *t1,LNode *t2)初始条件:存在两个结点t1,t2; 操作结果:实现两个结点的相加。void print(LNode *L) 初始条件:L存在;操作结果:打印链表L。3 详细设计(1)主过程(2)打印求和链表过程4 调试分析输入的数必须

2、为长度不超过一百位的整数,否则出现错误;如:输入6.4和3.2,输出结果为9-46。根据实际情况的需要,可以将整数的长度定义为1000位,甚至更长。5 总结(1) 熟悉掌握链表的建立及调用,同时对数组的理解进一步加深;(2) 认识到自己的不足,以后多加练习,争取写出更好的算法。实验内容:源程序:#include#include#include#define MAX 100typedef struct LNodeint data;struct LNode *pre,*next;LNode,List;LNode *CreatList()LNode *p,*q,*r;char sMAX;int i=

3、0;printf(输入一个整数:);gets(s);p=(LNode*)malloc(sizeof(List)*MAX);q=r=p;p-data=-1;while(si!=NULL)q=(LNode*)malloc(sizeof(List);q-data=si+-0;q-pre=r;r-next=q;r=q;r-next=NULL;return p;LNode Add(LNode *t1,LNode *t2)while(t1-data!=-1&t2-data!=-1)t1-data=t1-data+t2-data;if(t1-data9)t1-data-=10;t1-pre-data+=1;

4、t1=t1-pre;t2=t2-pre;if(t1-next-data9)t1-next-data-=10;return *t1;LNode *Compare(LNode *p1,LNode *p2)LNode *s1=p1-next,*s2=p2-next,*t1,*t2;int i=0,j=0;while(s1!=NULL)t1=s1;s1=s1-next;i+;while(s2!=NULL)t2=s2;s2=s2-next;j+;if(i=j)Add(t1,t2);else Add(t2,t1);return i=j?p1:p2;void print(LNode *L)LNode *p;

5、printf(两整数的和为:);if(L-data!=-1)printf(%d,1);p=L-next;doprintf(%d,p-data);p=p-next;while(p!=NULL);printf(n);int main()LNode *p1,*p2,*p3;p1=CreatList();p2=CreatList();p3=Compare(p1,p2);print(p3);getch();return 0;运行结果:示例输入一个整数:6541输入一个整数:212354两整数的和为:218895运行效果图为:算法2 算术表达式求值1 需求分析课程设计任务是以字符序列的形式从终端输入语法正

6、确的、不含变量的整数表达式,利用给定的算符优先关系,实现对算术四则混合运算表达式的求值,并演示在求值过程中运算符栈、操作数栈、操作数栈和主要操作的变化过程。输入的形式和输入值的范围:不含变量的整数表达式,算术四则混合运算表达式。输出的形式:表达式。2 概要设计Status InitStack(SqStack &S)操作结果:构造一个空栈S。Status GetTop(SqStack S)初始条件:栈S存在且非空。操作结果:用e返回S的栈顶元素.Status Push (SqStack &S,ElemType e) 初始条件:栈S已存在。操作结果:插入元素e为新的栈顶元素.Status Pop

7、(SqStack &S,ElemType &e) 初始条件:栈S存在且非空. 操作结果:删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR.3 详细设计4 调试分析设计算法时,应考虑到运算符的优先关系,依此思想进行设计;该算法的时间复杂度为O(n),n为栈的长度;5. 总结(1) 通过该算法了解到自己对栈的理解不是很到位,因此以后要加强这方面的练习,遇到类似问题时,不会束手无策;(2) 该算法是参考资料加上自己的理解所得,学到了不少的东西,收获也不小。实验内容:源程序:#include #include #include #include #define OVERFLOW -1#d

8、efine OK 0#define ERROR 1typedef int Status;#define STACK_INIT_SIZE 100 /初始分配量#define STACKINCREMENT 10 /存储空间的分配增量typedef char ElemType; typedef ElemType OperandType; /操作数typedef char OperatorType;typedef struct ElemType *base; ElemType *top; int stacksize;SqStack;Status InitStack(SqStack &S) /构造一个空

9、栈S S.base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType); if(!S.base) exit (OVERFLOW); S.top = S.base; S.stacksize = STACK_INIT_SIZE; return OK;Status GetTop(SqStack S) ElemType e; if (S.top = S.base) return ERROR; e = *(S.top-1); return e;Status Push (SqStack &S,ElemType e) /插入元素e为新的栈顶元素 i

10、f (S.top - S.base = S.stacksize) S.base = (ElemType *) realloc ( S.base, (S.stacksize + STACKINCREMENT) * sizeof(ElemType); if(!S.base) exit (OVERFLOW); S.top = S.base + S.stacksize; S.stacksize += STACKINCREMENT; *S.top+ = e; return OK;Status Pop (SqStack &S,ElemType &e) /若栈不空,则删除S的栈顶元素,用e返回其值,并返回O

11、K;否则返回ERROR if(S.top = S.base) return ERROR; e = * -S.top; return OK;char In(char c,char OP) if(c=35 & c; else if(mab=2) return 47) a=atoi(&a); if(b47) b=atoi(&b); switch(theta) case +: return a+b; break; case -: return a-b; break; case *: return a*b; break; case /: return a/b; break; OperandType Ev

12、aluateExpression() SqStack OPTR,OPND; OperandType a,b,c; OperatorType theta; InitStack(OPTR); Push(OPTR,#); InitStack(OPND); c=getchar(); while (c!=# | GetTop(OPTR)!=#) if (!In(c,OP)Push(OPND,c);c=getchar(); else switch(Precede(GetTop(OPTR),c) case : Pop(OPTR,theta); Pop(OPND,b); Pop(OPND,a); Push(OPND,Operate(a,theta,b); break; return GetTop(OPND);void main() printf(以#为结束符)n); printf(请输入:n); int a; a=(int)EvaluateExpression(); printf(%d,a); getch();运行结果:示例(以#为结束符)请输入:4*(2+3)-4#16运行效果图为:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1