版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构实验报告实验一:一元多项式相加姓 名: 周 成 学 号: 13083511 专 业: 软件工程 任 课 教 师: 马慧珠 2013年12 月01 日1.实验名称:一元多项式相加2.实验目的: 如何使用C语言实现链表的说明、创建以及结点的插入和删除等操作。3.实验要求:对一元多项式能实现输入、输出,以及两个一元多项式相加及结果显示。4.实验内容:一元多项式的表示在计算机内用链表来实现,同时为了节省存储空间,只存储其中非零的项,链表中的每个节点存放多项式的系数非零项。它包含三个域,分别存放多项式的系数,指数,以及指向下一个项的指针。根据一元多项式相加的运算规则:对于两个一元多项式中所有指数
2、相同的项,对应系数相加,若其和不为零,则构成“和多项式”中的一项,对于两个一元多项式中所有指数不相同的项,则分别复抄到“和多项式”中去。核心算法PolyAdd是把分别由pa和pb所指的两个多项式相加,结果为pa所指的多项式。运算规则如下:相加时,首先设两个指针变量qa和qb分别从多项式的首项开始扫描,比较qa和qb所指结点指数域的值,可能出现下列三种情况之一:(1)qa->exp大于qb->exp,则qa继续向后扫描。(2)qa->exp等于qb->exp,则将其系数相加。若相加结果不为零,将结果放入qa->coef中,并删除qb所指结点,否则同时删除qa和qb所
3、指结点。然后qa、qb继续向后扫描。(3)qa->exp小于qb->exp,则将qb所指结点插入qa所指结点之前,然后qa、qb继续向后扫描。扫描过程一直进行到qa或qb有一个为空为止,然后将有剩余结点的链表接在结果表上。所得pa指向的链表即为两个多项式之和。5.实验程序代码及运行结果:#include "stdafx.h"#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include<stdio.h> #define NULL 0typedef s
4、truct NODE float coef; /系¦Ì数ºy int expn; /指?数ºy struct NODE *next; NODE;NODE *Creat(int n);void print(NODE *head);NODE *AddPolyn(NODE *head1, NODE *head2);NODE *Delfirst(NODE *head, NODE *q);void InsertBefore(NODE *p1, NODE *p2);int compare(int a, int b);/*创ä¡ä建
5、61;§链¢¡ä表À¨ª*/NODE *Creat(int n) NODE *current, *previous, *head; int i; head = (NODE *)malloc(sizeof(NODE); /*创ä¡ä建¡§头ª¡¤结¨¢点Ì?*/ previous = head; for(i = 0; i < n; i+) current = (NODE *)malloc(sizeof(NODE)
6、; printf("请?输º?入¨?系¦Ì数ºy和¨ª指?数ºy : "); scanf("%f%d", ¤t->coef, ¤t->expn); previous->next = current; previous = current; previous->next = NULL; return head;/*一°?元a多¨¤项?式º?的Ì?想?加¨&
7、#174;,ê?总Á¨¹体¬?考?虑?,ê?可¨¦分¤?qa的Ì?指?数ºy比À¨¨qb小?,ê?或¨°等̨¨于®¨²pb(如¨?果?系¦Ì数ºy相¨¤加¨®等̨¨于®¨²0和¨ª不?等Ì
8、8;¨于®¨²0),或¨°大䨮于®¨²pb里¤?面?由®¨¦InsertBefore和¨ªDelfirst两¢?个?小?模¡ê块¨¦组Á¨¦成¨¦一°?部?分¤?*/NODE *AddPolyn(NODE *head1, NODE *head2) NODE *ha, *hb, *qa, *qb;
9、 int a, b; float sum; ha = head1; /*ha和¨ªhb指?向¨°头ª¡¤结¨¢点Ì?*/ hb = head2; qa = ha->next; /*qa和¨ªqb指?向¨°头ª¡¤结¨¢点Ì?的Ì?下?一°?个?结¨¢点Ì?*/ qb = hb->next; while(qa && qb)
10、 /*qa和¨ªqb均¨´非¤?空?*/ a = qa->expn; b = qb->expn; switch(compare(a, b) case -1 : /*qa->expn < qb->expn*/ ha = qa; qa = qa->next; break; case 0 : sum = qa->coef + qb->coef; /*系¦Ì数ºy的Ì?和¨ª*/ if(sum != 0.0) /*如¨?果?不?是
11、86;?0.0*/ qa->coef = sum; /*改?变À?系¦Ì数ºy*/ ha = qa; else free(Delfirst(ha, qa); free(Delfirst(hb, qb); qa = ha->next; qb = hb->next; /*qb释º¨ª放¤?后¨®要°a重?新?赋3值¦Ì*/ break; case 1 : /*如¨?果?qa-> expn > qb -> expn*/ Del
12、first(hb, qb); InsertBefore(ha, qb); /*把ã?qb插?入¨?到Ì?ha下?一°?个?结¨¢点Ì?之?前¡ã*/ qb = hb->next; ha = ha->next; break; if(qb) ha->next = qb; /*插?入¨?剩º¡ê余®¨¤的Ì?pb*/ free(head2); return head1; /*比À¨¨较
13、?*/int compare(int a, int b) if(a < b) return -1; else if(a > b) return 1; else return 0;/*删¦?除y结¨¢点Ì?q*/NODE *Delfirst(NODE *p1, NODE *q) p1 -> next = q -> next; return (q); /*插?入¨?结¨¢点Ì?,引°y入¨?结¨¢点Ì?p,可¨¦以°
14、?让¨?p插?入¨?到Ì?p2和¨ªp1之?间?*/void InsertBefore(NODE *p1, NODE *p2) NODE *p; p = p1->next; p1->next = p2; p2->next = p;/*打䨰印®?,为a了¢?美¨¤观?程¨¬序¨°分¤?开a打䨰印®?*/void print(NODE *head) NODE *cu
15、rrent; current = head->next; while(current->next != NULL) printf("%0.f * x%d + ", current->coef, current->expn); current = current -> next; printf("%0.f * x%d", current->coef, current->expn); /system(ꡧ"pause"); int main() NODE *head
16、1, *head2, *head3; int n1, n2; printf("请?输º?入¨?你?需¨¨要°a的Ì?多¨¤项?式º?的Ì?项?数ºy n1 : "); scanf("%d", &n1); head1 = Creat(n1); printf("第̨²一°?个?多¨¤项?式º?的Ì?显?示º? : n"); prin
17、t(head1); printf("n请?输º?入¨?你?需¨¨要°a的Ì?多¨¤项?式º?的Ì?项?数ºy n2 : "); scanf("%d", &n2); head2 = Creat(n2); printf("n第̨²二t个?多¨¤项?式º?的Ì?显?示º? : n"); print(head2); head3 = AddPolyn(head1, head2); printf("n合?并¡é后¨®的Ì?多¨¤项?式º?的Ì?显?示º? : n"); print(head3); printf("n");运行结果:实验数据1如图:输入一个四次二项式X3+2X4,一个五次二项式X4+2X5,输出如图:实验数据2如图:输入一个五次四项式X2+X3+X4+X5,还有一个五次五项式1+X+X3+2X4+2X5输出如图所示实验数据3如图:输入一个七次三项式1+2x5+3X7,还有一个五次四
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (高考英语作文炼句)第26篇译文老师笔记
- 开题报告:指向学习调节的学生自我评价机制与策略研究
- 开题报告:粤港澳跨域教师团队建设的边界阻隔与突破机制研究
- 开题报告:医学人文教育中的师生互动及影响机制研究
- 开题报告:新时代背景下高职汽车专业群学生职业核心能力提升路径研究
- 《上海移动怒江机房》课件
- 中考地理总复习阶段测试01 地球和地图(解析版)
- 2024年债务考量离婚合同书标准格式版B版
- 2024年商业门面租赁协议标准模板一
- 元器件识别与选用 第10章 数据手册的阅读
- (内容完整)三年级部编版《司马光砸缸》课件
- 球墨铸铁管安装规范及图示课件
- 泰国美食英语介绍-课件
- 消防水泵房巡查记录表
- 最新北师大版六年级数学上册(完美版) 练习五
- 新疆维吾尔自治区伊犁哈萨克自治州各县区乡镇行政村村庄村名居民村民委员会明细及行政区划代码
- 当前国际形势与两岸关系优质课件
- 民用建筑供暖通风与空气调节设计规范
- 三年级上册音乐课件第1课《我们的学校亚克西》|花城版(共20张)
- 《招标投标法》学习培训
- 2022年贵州省遵义市中考物理试题及答案解析
评论
0/150
提交评论