大二下学期数据结构课程设计实验报告.docx
- 文档编号:1418304
- 上传时间:2022-10-22
- 格式:DOCX
- 页数:49
- 大小:636.69KB
大二下学期数据结构课程设计实验报告.docx
《大二下学期数据结构课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《大二下学期数据结构课程设计实验报告.docx(49页珍藏版)》请在冰豆网上搜索。
大二下学期数据结构课程设计实验报告
景德镇陶瓷大学
数据结构课程设计报告
题
目:
371416
院系名称:
专业名称:
信息工程学院
信息与计算科学
班
级:
15信息一班
学生姓名:
孟喜洋
学号:
115060200101
指导教师:
杨利华
设计起止时间:
2017.6.5——2017.6.16
题目3一元多项式计算
1、实验目的
1)、能够按照指数降序排列建立并输出多项式;
2)、能够完成两个多项式的相加、相减,并将结果输入。
2、实验要求
在上交资料中请写明:
存储结构、多项式相加的基本过程的算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法。
3.存储结构
TypedefstructPNode;
{
floatcoef;
Intexpn;
StructPNode*next;
}Pnode,*Polynomial;
4.基本算法
1.概要设计
1.功能:
将要进行运算的多项式输入输出。
2.数据流入:
要输入的多项式的系数与指数。
3.数据流出:
合并同类项后的多项式。
4.程序流程图:
多项式输入流程图如图所示。
5.测试要点:
输入的多项式是否正确,若输入错误则重新输入
+++++++++++++++
+++++++++++++++
+++++++++++++++
++++++++++
否
是否输入正确
是
2、多项式的加法
开始
是
存储多项式1的空链P是否为空
否
是
存储多项式2的空链Q是否为空
否
中
中
结束
3、多项式的减法
开始
是
存储多项式1的空链P是否为空
否
是
存储多项式2的空链Q是否为空
否
r中
中
结束
5.源程序
#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; //项的系数大于的种情况 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; } //项的系数小于的种情况 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,Link
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大二 学期 数据结构 课程设计 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)