实验一 线性表及其应用 一、 实验目的和要求 1、掌握线性表的插入、删除、查找等基本操作设计与实现 2、学习利用线性表提供的接口去求解实际问题 3、熟悉线性表的的存储方法 二、 实验内容和原理 1、实验内容:设计一个一元多项式的简单计算器,其基本功能有①输入并建立多项式;②输出多项式;③多项式相加。可利用单链表或单循环链表实现之。 2、实验原理:以线性表来描述一元多项式,存储结构采用单链表,每个结点存储的多项式中某一项的系数和指数,建立单链表时指数高的结点列于指数低的 结点之后,即线性表的元素按指数递增有序排列。 三、 实验环境 Visual C++ 6.0 及PC机 四、 算法描述及实验步骤 思想算法: 以线性表来描述一元多项式,存储结构采用单链表,每个结点存储的多项式中某一项的系数和指数,建立单链表时指数高的结点列于指数低的结点之后,即线性表的元素按指数递增有序排列。 例如构造两个多项式ha: 5X3+4X2+3X+2 hb: X2+X+1 多项式加法:定义指针p,q分别指向ha,hb i.p->exp==q->exp ,r->coef=p->coef+q->coef,pa,pb下移; ii.p->expexp ,r->coef=q->coef;r->exp=q->exp;,q下移 iii.pa->exp>pb->exp, r->exp=p->exp;r->coef=p->coef;,p下移 iv.p!=NULL,pb==NULL.相当于iii. V.q==NULL,pb!=NULL.相当于ii. 其流程图如下: 多项式乘法:定义指针fp,gp分别指向f,g 1.将两多项式最大指数相加并赋于maxp,并置g 2.用for循环求指数等于maxp时相乘的系数 3. (fp!=NULL)&&(gp!=NULL), p=fp->exp+gp->exp 1.p>maxp, fp=fp->next; 2. pnext; 3.p=maxp, x+=fp->coef*gp->coef; fp=fp->next;gp=gp->next; 五、 实验结果 1.分别输入两个多项式: 5X3+4X2+3X+2 和X2+X+1,然后输出结果如下: 2.分别输入两个多项式:6X4+4X2+2和5X+6,然后输出结果如下: 六、 总结 此次上机实验应用了线性表实现了一次实际操作,完成了一个一元多项式的简单计算器,不仅对此次编译程序的算法思想有了新的认识,还让我深刻的体会到了线性表的重要性以及其应用的方便,并且对指针加深了映象,应用了书本中的算法思想,对我以后的编译以及完成新的程序有很大的帮助。 附录: 1.建立多项式列表代码如下: mulpoly *creatpoly()/*建立多项式列表*/ {mulpoly *head,*r,*s;/*设中间变量*/ int m,n; head=(mulpoly *)malloc(sizeof(mulpoly));/*头结点申请空间*/ printf("\ninput coef and exp:\n"); scanf("%d%d",&n,&m);/*输入多项式系数和指数*/ r=head;/*尾指针指向头指针*/ while(n!=0)/*将输入的多项式存放在S中*/ {s=(mulpoly*)malloc(sizeof(mulpoly)); s->coef=n; s->exp=m; r->next=s; r=s; /*printf("input coef and exp:\n");*/ scanf("%d%d",&n,&m);/*再次输入多项式系数和指数*/ } r->next=NULL;/*将尾指针置空*/ head=head->next;/*将head哑结点向前跑一个结点,使其不为空*/ return (head);/*返回多项式*/ } 2.两个多项式相加代码如下: mulpoly *polyadd(mulpoly *ha,mulpoly *hb)/*两个多项式相加*/ {mulpoly *hc,*p,*q,*s,*r;/*声明结构体型*/ int x; p=ha; q=hb; hc=(mulpoly *)malloc(sizeof(mulpoly));/*申请结点空间*/ s=hc; while((p!=NULL)&&(q!=NULL))/*两多项式不为空*/
2021-03-21 16:47:23 226KB 实验报告
1
在计算机语言中,整数最大可以设置为unsigned long类型的,但是表示有限,当涉及到两个大整数相乘的时候,会出现不能表示的情况,鉴于此编制此算法予以解决大整数相乘。本程序使用分治法实现,将n位二进制整数X和Y都分为2段,每段的长为n/2位。对输入的数转化为8的倍数,使用分治法转化为1位,然后递归调用计算。
2021-03-21 15:04:47 78KB 大整数
1
主要是利用c语言对矩阵相乘进行了编程,嵌入此程序使得处理数据更加简便。
2020-02-22 03:08:52 4KB 矩阵相乘
1
通过一个实例去理解OpenMP,看完后,就能完成初步OpenMP编程!十分适合入门!通过实例再回头学习原理,更清晰!希望对大家有帮助!谢谢!
2020-01-18 03:35:16 376KB OpenMP
1
通过减少问题规模形式,做并行计算,求解矩阵相乘问题,mpi,MPI,思想是将第一个矩阵分块,每个进程只计算矩阵的几行,最终传给主进程吗、,主进程输出结果
2020-01-18 03:23:34 5KB MPI矩阵
1
矩阵相乘是线性代数中最常见的问题之一,它在数值计算中有广泛的应用,在计算机的世界里,矩阵相乘扮演着一个不可或缺的角色。此文档分别用串行和并行代码实现了矩阵相乘的过程
2020-01-18 03:02:28 752KB OpenMP 矩阵相乘 串行算法 并行算法
1
该程序实现了两矩阵相乘、矩阵转置和求逆矩阵的功能,是非常实用的,特别是求逆矩阵的算法,非常到位!
2020-01-03 11:34:50 221KB VC、矩阵、乘积、转置、逆矩阵
1
本程序利用mpi实现矩阵并行相乘。你需要安装mpich并配置好环境。编译:mpicc Matrixmulti.c -o Matrixmulti 运行:mpirun -np 5 ./Matrixmulti ;5为进程数,可以更换
2020-01-03 11:29:32 7KB 矩阵mpi
1
稀疏矩阵相加、相乘和转置(用三元组实现)
2020-01-03 11:23:08 7KB 矩阵
1
1、大数相乘。要求实现两个十进制大整数的相乘,输出乘法运算的结果。 定义两个大单元,MUL 乘法 2、C语言编写多重循环程序,查看其反汇编码,分析各条语句功能,并采用汇编语言编写相同功能程序。 反汇编在WinDbg 考虑两重循环 3、结合Windows界面编程,实现计算器功能。 可以调用Windows的计算器 4、实现内存与外存或者内存之间的大数据块复制,尽可能对代码进行性能优化,显示执行时间,并可通过WinDbg等查看执行结果。 执行前后时间 5、C库函数底层分析与实现(printf\scanf\strcpy……),分析C库函数的底层实现细节,用汇编语言实现相同功能的简单C库函数。 分析printf 6、通过查阅资料,采用汇编实现随机数算法。 随机数 7、实现两个文本文件内容的比对。若两文件内容一样,输出相应提示;若两文件不一样,输出对应的行号。 详细请参考具体代码
2019-12-21 22:14:20 515KB 大数相乘
1