您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 数据结构课程设计—一元多项式加法、减法、乘法运算的实现
11.一元多项式加法、减法、乘法运算的实现1.1设计内容及要求1)设计内容(1)使用顺序存储结构实现多项式加、减、乘运算。例如:10321058)(2456xxxxxxf,xxxxxxg23451020107)(求和结果:102220128)()(2356xxxxxgxf(2)使用链式存储结构实现多项式加、减、乘运算,10305100)(1050100xxxxf,xxxxxxg320405150)(10205090求和结果:1031040150100)()(102090100xxxxxxgxf2)设计要求(1)用C语言编程实现上述实验内容中的结构定义和算法。(2)要有main()函数,并且在main()函数中使用检测数据调用上述算法。(3)用switch语句设计如下选择式菜单。***************数据结构综合性实验***********************一、多项式的加法、减法、乘法运算*****************1.多项式创建*****************2.多项式相加*****************3.多项式相减*****************4.多项式相乘*****************5.清空多项式*****************0.退出系统*****************请选择(0—5)************************************************************请选择(0-5):1.2数据结构设计根据下面给出的存储结构定义:2#defineMAXSIZE20//定义线性表最大容量//定义多项式项数据类型typedefstruct{floatcoef;//系数intexpn;//指数}term,elemType;typedefstruct{termterms[MAXSIZE];//线性表中数组元素intlast;//指向线性表中最后一个元素位置}SeqList;typedefSeqListpolynomial;1.3基本操作函数说明polynomial*Init_Polynomial();//初始化空的多项式intPloynStatus(polynomial*p)//判断多项式的状态intLocation_Element(polynomial*p,termx)在多项式p中查找与x项指数相同的项是否存在intInsert_ElementByOrder(polynomial*p,termx)//在多项式p中插入一个指数项xintCreatePolyn(polynomial*P,intm)//输入m项系数和指数,建立表示一元多项式的有序表pcharcompare(termterm1,termterm2)//比较指数项term1和指数项term2polynomial*addPloyn(polynomial*p1,polynomial*p2)3//将多项式p1和多项式p2相加,生成一个新的多项式polynomial*subStractPloyn(polynomial*p1,polynomial*p2)//多项式p1和多项式p2相减,生成一个新的多项式polynomial*mulitPloyn(polynomial*p1,polynomial*p2)//多项式p1和多项式p2相乘,生成一个新的多项式voidprintPloyn(polynomial*p)//输出在顺序存储结构的多项式p1.4程序源代码#includestdlib.h#includestdio.h#includeiostream.h#defineNULL0#defineMAXSIZE20typedefstruct{floatcoef;intexpn;}term,elemType;typedefstruct{termterms[MAXSIZE];intlast;}SeqList;typedefSeqListpolynomial;voidprintPloyn(polynomial*p);intPloynStatus(polynomial*p){if(p==NULL){return-1;}elseif(p-last==-1){return0;}4else{return1;}}polynomial*Init_Polynomial(){polynomial*P;P=newpolynomial;if(P!=NULL){P-last=-1;returnP;}else{returnNULL;}}voidReset_Polynomial(polynomial*p){if(PloynStatus(p)==1){p-last=-1;}}intLocation_Element(polynomial*p,termx){inti=0;if(PloynStatus(p)==-1)return0;while(i=p-last&&p-terms[i].expn!=x.expn){i++;}if(ip-last){return0;}else{return1;}}5intInsert_ElementByOrder(polynomial*p,termx){intj;if(PloynStatus(p)==-1)return0;if(p-last==MAXSIZE-1){coutThepolymisfull!endl;return0;}j=p-last;while(p-terms[j].expnx.expn&&j=0){p-terms[j+1]=p-terms[j];j--;}p-terms[j+1]=x;p-last++;return1;}intCreatePolyn(polynomial*P,intm){floatcoef;intexpn;termx;if(PloynStatus(P)==-1)return0;if(mMAXSIZE){printf(顺序表溢出\n);return0;}else{printf(请依次输入%d对系数和指数...\n,m);for(inti=0;im;i++){scanf(%f%d,&coef,&expn);x.coef=coef;x.expn=expn;if(!Location_Element(P,x)){Insert_ElementByOrder(P,x);}6}}return1;}charcompare(termterm1,termterm2){if(term1.expnterm2.expn){return'';}elseif(term1.expnterm2.expn){return'';}else{return'=';}}polynomial*addPloyn(polynomial*p1,polynomial*p2){inti,j,k;i=0;j=0;k=0;if((PloynStatus(p1)==-1)||(PloynStatus(p2)==-1)){returnNULL;}polynomial*p3=Init_Polynomial();while(i=p1-last&&j=p2-last){switch(compare(p1-terms[i],p2-terms[j])){case'':p3-terms[k++]=p1-terms[i++];p3-last++;break;case'':p3-terms[k++]=p2-terms[j++];p3-last++;break;case'=':if(p1-terms[i].coef+p2-terms[j].coef!=0)7{p3-terms[k].coef=p1-terms[i].coef+p2-terms[j].coef;p3-terms[k].expn=p1-terms[i].expn;k++;p3-last++;}i++;j++;}}while(i=p1-last){p3-terms[k++]=p1-terms[i++];p3-last++;}returnp3;}polynomial*subStractPloyn(polynomial*p1,polynomial*p2){inti;i=0;if((PloynStatus(p1)!=1)||(PloynStatus(p2)!=1)){returnNULL;}polynomial*p3=Init_Polynomial();p3-last=p2-last;for(i=0;i=p2-last;i++){p3-terms[i].coef=-p2-terms[i].coef;p3-terms[i].expn=p2-terms[i].expn;}p3=addPloyn(p1,p3);returnp3;}polynomial*mulitPloyn(polynomial*p1,polynomial*p2){inti;intj;intk;i=0;if((PloynStatus(p1)!=1)||(PloynStatus(p2)!=1)){returnNULL;8}polynomial*p3=Init_Polynomial();polynomial**p=newpolynomial*[p2-last+1];for(i=0;i=p2-last;i++){for(k=0;k=p2-last;k++){p[k]=Init_Polynomial();p[k]-last=p1-last;for(j=0;j=p1-last;j++){p[k]-terms[j].coef=p1-terms[j].coef*p2-terms[k].coef;p[k]-terms[j].expn=p1-terms[j].expn+p2-terms[k].expn;}p3=addPloyn(p3,p[k]);}}returnp3;}voidprintPloyn(polynomial*p){inti;for(i=0;i=p-last;i++){if(p-terms[i].coef0&&i0)cout+p-terms[i].coef;elsecoutp-terms[i].coef;coutx^p-terms[i].expn;}coutendl;}voidmenu(){cout\t\t*******数据结构综合性实验*********endl;cout\t\t***一、多项式的加、减、乘法运算***endl;cout\t\t*******1.多项式创建*********endl;cout\t\t*******2.多项式相加*********endl;cout\t\t*******3.多项式相减*********endl;cout\t\t*******4.多项式相乘*********endl;cout\t\t*******5.清空多项式*********endl;cout\t\t*******0.退出系统*********endl;cout\t\t******请选择(0-5)********endl;9cout\t\t***********************************endl;}voidmain(){intsel;polynomial*p1=NULL;polynomial*p2=NULL;polynomial*p3=NULL;while(1){menu();cout\t\t*请选择(0-5):;cinsel;switch(sel){case1:p1=Init_Polynomial();p2=Init_Polynomial();intm;printf(请输入第一个
本文标题:数据结构课程设计—一元多项式加法、减法、乘法运算的实现
链接地址:https://www.777doc.com/doc-4711571 .html