文档介绍:蒈西南科技大学袅数据结构肅实验报告膃衿薇袄节芀肅专业班级____软件1004____蚃任课教师____李学俊______莂姓名______杨强_______莇学号____20101469_____螇实验地点____东六E108_____莂蒂螈芅蒅薂腿2011年11月22日羆芄实验一蚂一元多项式的加法、减法及乘乘法运算薀莄【问题描述】羂一元多项式的所有运算都可以用其加减运算加以实现。设计一个程序,实现一元多 项式的加法、减法及乘法运算。螂【基本要求】羀(1)、分别采用顺序存储和单链表作存储结构。在顺序存储中,一个多项式对应一个结构体数组,数组中的每个节点对应该多项式中的一项,所以每个节点至少包括系数域、指数域。在链式存储中,一个多项式对应一个单链表,链表中的每个节点对应该多项式中的一项,所以每个节点至少包括系数域、指数域及指向下一项的指针域。肆(2)、一元多项式要求从键盘上加以接收。肅(3)、运算规则如数学上的多项式的计算,要求能够在屏幕上输出相应的数据。螂【主要功能】肇实现两个单链表的加法、减法及乘法运算。袈【思路分析】螄存储结构:链式存储;袂算法:薈加法:两个多项式由键盘接收,输入包括系数部分和指数部分,程序接收完数据后,将按指数对多项式的项进行排序,然后合并同类 项,即得到最简多项式。将两个多项式进行合并同类项操作,即 达到多项式相加的目的。芆减法:在多项式的减法操作时,将减数的各项系数取反,再与被减多项式进行合并可得多项式相减的结果。薃乘法:首先进行指数的加减运算,然后做累加,即得多项式相乘的结果。羁【关键函数】罿 voidsort_HtoL(LinkList*L); //对表L中各项按降序排列羈 voidSimplify(LinkList*L); //对表L进行化简莂 voidSum(LinkList*LA,LinkList*LB,LinkList*&LC)//执行相加运算肁 voidSub(LinkList*LA,LinkList*LB) //执行相减运算莀 voidMulti(LinkList*LA,LinkList*LB,LinkList*&L)//执行相乘运算蒆莅膁【具体算法】蒇//按指数降序排列;膈voidsort_HtoL(LinkList*L) 膄{芁 LinkList*p,*q;袈 inttemp_coef,temp_exp; 蚅 for(p=L->next;p->next!=NULL;p=p->next)袃 for(q=p->next;q!=NULL;q=q->next)莁{艿 if(p->exp<q->exp) 莇{羅 temp_exp=p->exp; //交换指数;莁 p->exp=q->exp;虿 q->exp=temp_exp;螅蚄 temp_coef=p->coef; //同时交换系数;蒁 p->coef=q->coef;肀 q->coef=temp_coef;蒇}蒃}薁}***羅//合并同类项;节voidSimplify(LinkList*L) 蚀{薈 LinkList*p;蚇 p=L->next;芅 while(p->next!=NULL)螀 {罿 if(p->exp==p->next->exp) 膅{肄 p->coef=p->coef+p->next->coef; //合并;袀 p->next=p->next->next; 莀}袇 else袃{羀 p=p->next;螁}芄 }袆}羀//LA+LB=LC;羇voidSum(LinkList*LA,LinkList*LB,LinkList*&LC)肆{蚄 LinkList*p,*q,*s,*r;肀 p=LA->next;莇 q=LB->next;螇莂 inttemp;腿 LC=(LinkList*)malloc(sizeof(LinkList)); //创建头结点;螈 r=LC;膅 while(p!=NULL&&q!=NULL)膁 {艿 if(p->exp>q->exp)腿{羇 s=(LinkList*)malloc(sizeof(LinkList)); //复制结点;膄 s=p;莈 r->next=s;芆 r=s;莅 p=p->next; //指向LA的p指针后移;羃}蒈 elseif(p->exp<q->exp)蚇{肇 s=(LinkList*)malloc(sizeof(LinkList)); //复制结点;螂 s->exp=q->exp;螂 s->coef=q->coef;肈 r->next=s;