数据结构多项式 加减乘 指针 课程设计.docx
- 文档编号:12361654
- 上传时间:2023-04-18
- 格式:DOCX
- 页数:19
- 大小:16.87KB
数据结构多项式 加减乘 指针 课程设计.docx
《数据结构多项式 加减乘 指针 课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构多项式 加减乘 指针 课程设计.docx(19页珍藏版)》请在冰豆网上搜索。
数据结构多项式加减乘指针课程设计
#include
#include
#include
usingnamespacestd;
structNode
{
floatcoef;//结点类型
intexp;
};
typedefNodepolynomial;
structLNode
{
polynomialdata;//链表类型
LNode*next;
};
typedefLNode*Link;
voidCreateLink(Link&L,intn);
voidPrintList(LinkL);
voidPolyAdd(Link&pc,Linkpa,Linkpb);
voidPolySubstract(Link&pc,Linkpa,Linkpb);
voidCopyLink(Link&pc,Linkpa);
voidPolyMultiply(Link&pc,Linkpa,Linkpb);
intJudgeIfExpSame(Linkpa,Linke);
voidDestroyLink(Link&L);
intCompareIfNum(inti);
voidDestroyLink(Link&L)
{
Linkp;
p=L->next;
while(p)
{
L->next=p->next;
deletep;
p=L->next;
}
deleteL;
L=NULL;
}
//创建含有n个链表类型结点的项,即创建一个n项多项式
voidCreateLink(Link&L,intn)
{
if(L!
=NULL)
{
DestroyLink(L);
}
Linkp,newp;
L=newLNode;
L->next=NULL;
(L->data).exp=-1;//创建头结点
p=L;
for(inti=1;i<=n;i++)
{
newp=newLNode;
cout<<"请输入第"<
"< cout<<"系数: "; cin>>(newp->data).coef; cout<<"指数: "; cin>>(newp->data).exp; if(newp->data.exp<0) { cout<<"您输入有误,指数不允许为负值! "< deletenewp; i--; continue; } newp->next=NULL; p=L; if(newp->data.coef==0) { cout<<"系数为零,重新输入! "< deletenewp; i--; continue; } while((p->next! =NULL)&&((p->next->data).exp<(newp->data).exp)) { p=p->next;//p指向指数最小的那一个 } if(! JudgeIfExpSame(L,newp)) { newp->next=p->next; p->next=newp; } else { cout<<"输入的该项指数与多项式中已存在的某项相同,请重新创建一个正确的多项式"< deletenewp; DestroyLink(L); CreateLink(L,n);//创建多项式没有成功,递归调用重新创建 break; } } } /*判断指数是否与多项式中已存在的某项相同*/ intJudgeIfExpSame(LinkL,Linke) { Linkp; p=L->next; while(p! =NULL&&(e->data.exp! =p->data.exp)) p=p->next; if(p==NULL)return0; elsereturn1; } /*输出链表*/ voidPrintList(LinkL) { Linkp; if(L==NULL||L->next==NULL) cout<<"该一元多项式为空! "< else { p=L->next; //项的系数大于0的5种情况 if((p->data).coef>0) { if((p->data).exp==0) cout<<(p->data).coef; elseif((p->data).coef==1&&(p->data).exp==1) cout<<"x"; elseif((p->data).coef==1&&(p->data).exp! =1) cout<<"x^"<<(p->data).exp; elseif((p->data).exp==1&&(p->data).coef! =1) cout<<(p->data).coef<<"x"; elsecout<<(p->data).coef<<"x^"<<(p->data).exp; } //项的系数小于0的5种情况 if((p->data).coef<0) { if((p->data).exp==0) cout<<(p->data).coef; elseif(p->data.coef==-1&&p->data.exp==1) cout<<"-x"; elseif(p->data.coef==-1&&p->data.exp! =1) cout<<"-x^"< elseif(p->data.exp==1) cout< elsecout<<(p->data).coef<<"x^"<<(p->data).exp; } p=p->next; while(p! =NULL) { if((p->data).coef>0) { if((p->data).exp==0) cout<<"+"<<(p->data).coef; elseif((p->data).exp==1&&(p->data).coef! =1) cout<<"+"<<(p->data).coef<<"x"; elseif((p->data).exp==1&&(p->data).coef==1) cout<<"+"<<"x"; elseif((p->data).coef==1&&(p->data).exp! =1) cout<<"+"<<"x^"<<(p->data).exp; elsecout<<"+"<<(p->data).coef<<"x^"<<(p->data).exp; } if((p->data).coef<0) { if((p->data).exp==0) cout<<(p->data).coef; elseif(p->data.coef==-1&&p->data.exp==1) cout<<"-x"; elseif(p->data.coef==-1&&p->data.exp! =1) cout<<"-x^"< elseif(p->data.exp==1) cout< elsecout<<(p->data).coef<<"x^"<<(p->data).exp; } p=p->next; } } cout< } /*把一个链表的内容复制给另一个链表*/ voidCopyLink(Link&pc,Linkpa) { Linkp,q,r; pc=newLNode; pc->next=NULL; r=pc; p=pa; while(p->next! =NULL) { q=newLNode; q->data.coef=p->next->data.coef; q->data.exp=p->next->data.exp; r->next=q; q->next=NULL; r=q; p=p->next; } } /*将两个一元多项式相加*/ voidPolyAdd(Link&pc,Linkpa,Linkpb) { Linkp1,p2,p,pd; CopyLink(p1,pa); CopyLink(p2,pb); pc=newLNode; pc->next=NULL; p=pc; p1=p1->next; p2=p2->next; while(p1! =NULL&&p2! =NULL) { if(p1->data.exp { p->next=p1; p=p->next; p1=p1->next; } elseif(p1->data.exp>p2->data.exp) { p->next=p2; p=p->next; p2=p2->next; } else { p1->data.coef=p1->data.coef+p2->data.coef; if(p1->data.coef! =0) { p->next=p1; p=p->next; p1=p1->next; p2=p2->next; } else { pd=p1; p1=p1->next; p2=p2->next; deletepd; } } } if(p1! =NULL) { p->next=p1; } if(p2! =NULL) { p->next=p2; } } /*将两个多项式相减*/ voidPolySubstract(Link&pc,Linkpa,Linkpb) { Linkp,pt; CopyLink(pt,pb); p=pt; while(p! =NULL) { (p->data).coef=(-(p->data).coef); p=p->next; } PolyAdd(pc,pa,pt); DestroyLink(pt); } //清屏函数 voidClear() { system("pause"); system("cls"); } /*将两个一元多项式相乘*/ voidPolyMultiply(Link&pc,Linkpa,Linkpb) { Linkp1,p2,p,pd,newp,t; pc=newLNode; pc->next=NULL; p1=pa->next; p2=pb->next; while(p1! =NULL) { pd=newLNode; pd->next=NULL; p=newLNode; p->next=NULL; t=p; while(p2) { newp=newLNode; newp->next=NULL; newp->data.coef=p1->data.coef*p2->data.coef; newp->data.exp=p1->data.exp+p2->data.exp; t->next=newp; t=t->next; p2=p2->next; } PolyAdd(pd,pc,p); CopyLink(pc,pd); p1=p1->next; p2=pb->next; DestroyLink(p); DestroyLink(pd); } } //菜单函数 voidMenu() { cout<<"\t=========================一元多项式的简单运算========================="< cout<<"\t\t\t\t\t\t\t\t"< cout<<"\t\t\t[1]创建要运算的两个一元多项式\t\t"< cout<<"\t\t\t[2]将两个一元多项式相加\t\t\t"< cout<<"\t\t\t[3]将两个一元多项式相减\t\t\t"< cout<<"\t\t\t[4]将两个一元多项式相乘\t\t\t"< cout<<"\t\t\t[5]显示两个一元多项式\t\t\t"< cout<<"\t\t\t[6]销毁所创建的二个多项式\t\t"< cout<<"\t\t\t[7]退出\t\t\t\t\t"< cout<<"\t\t\t\t\t\t\t\t"< cout<<"\t=========================一元多项式的简单运算========================="< cout<<"\t\t请选择: "; } //判断输入的整数是不是为1到7的数字 intCompareIfNum(inti) { if(i>0&&i<8) return0; elsereturn1; } voidmain() { { system("color6"); //system("pause"); } intn; LinkL,La=NULL,Lb=NULL;//La,Lb分别为创建的两个多项式 intchoose; while (1) { Menu();//调用菜单函数 cin>>choose; switch(choose) { case1: cout<<"请输入你要运算的第一个一元多项式的项数: "< cin>>n; /*if(CompareIfNum(n)==1) { cout<<"您的输入有误,请重新输入……"< Clear(); break; }*/ CreateLink(La,n); cout<<"请输入你要运算的第二个一元多项式的项数: "< cin>>n; if(CompareIfNum(n)==1) { cout<<"您的输入有误,请重新输入……"< Clear(); break; } CreateLink(Lb,n); Clear(); break; case2: if(La==NULL||Lb==NULL) { cout<<"您的多项式创建有误,请重新选择……"< Clear(); break; } PolyAdd(L,La,Lb); cout<<""< cout<<"待相加的两个一元多项式为: "< cout<<""< cout<<"A的多项式为: "; PrintList(La); cout<<""< cout<<"B的多项式为: "; PrintList(Lb); cout<<""< cout<<"相加后的结果为: "; PrintList(L); cout<<""< Clear(); DestroyLink(L); break; case3: if(La==NULL||Lb==NULL) { cout<<"您的多项式创建有误,请重新选择……"< Clear(); break; } PolySubstract(L,La,Lb); cout<<"相减的两个一元多项式为: "< cout<<""< cout<<"A的多项式为: "; PrintList(La); cout<<""< cout<<"B的多项式为: "; PrintList(Lb); cout<<""< cout<<"相减后的结果为: "; PrintList(L); cout<<""< Clear(); DestroyLink(L); break; case4: if(La==NULL||Lb==NULL) { cout<<"您的多项式创建有误,请重新选择……"< Clear(); break; } PolyMultiply(L,La,Lb); cout<<"相乘的两个一元多项式为: "< cout<<""< cout<<"A的多项式为: "; PrintList(La); cout<<""< cout<<"B的多项式为: "; PrintList(Lb); cout<<""< cout<<"相乘后的结果为: "; PrintList(L); DestroyLink(L); cout<<""< Clear(); break; case5: if(La==NULL||Lb==NULL) { cout<<"您的多项式创建有误,请重新选择……"< Clear(); break; } cout<<"一元多项式A为: "< PrintList(La); cout<<""< cout<<"一元多项式B为: "< PrintList(Lb); cout<<""< Clear(); break; case6: if(La&&Lb) { DestroyLink(La); DestroyLink(Lb); cout<<"多项式销毁成功! "< Clear(); } else { cout<<"多项式不存在,请重新选择^^^"< Clear(); } break; case7: exit(0);//exit(0)强制终止程序,返回状态码0表示正常结束 default: cout<<"您的输入有误,请重新选择操作……"< Clear(); break; } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构多项式 加减乘 指针 课程设计 数据结构 多项式 加减