数据结构上机作业DOC.docx
- 文档编号:57248
- 上传时间:2022-10-01
- 格式:DOCX
- 页数:34
- 大小:237.54KB
数据结构上机作业DOC.docx
《数据结构上机作业DOC.docx》由会员分享,可在线阅读,更多相关《数据结构上机作业DOC.docx(34页珍藏版)》请在冰豆网上搜索。
数据结构上机作业DOC
实验一线性表
1、实验题线性表的应用———多项式计算
2、程序设计思路
包括每个函数的功能说明,及一些重要函数的算法实现思路一链式存储:
1.voidInitPoly(LNode*&p)初始化多项式
2.voidTraversePoly(LNode*&p)遍历多项式
3.voidClearPoly(LNode*&p)清除多项式
4.voidInsertPoly(LNode*&p,doublea,inte)插入一项
5.voidDeletetPoly(LNode*&p,intpos)删除一项
6.doublePolySum(LNode*&p,doublex)多项式求值
7.LNode*PolyAdd(LNode*&p1,LNode*&p2)多项式相加
顺序存储:
1.voidInitPoly1(SeqList&L)初始化多项式
2.voidClearPoly1(SeqList&L)清除多项式
3.voidTraversePoly1(SeqListL)遍历多项式
4.boolInsertPoly1(SeqList&L,ElemTypeitem)插入一项
5.doublePolySum1(SeqListL,doublex)多项式求值
6.boolDeleteList1(SeqList&L,intpos)删除一项
7.SeqListPolyAdd1(SeqList&L1,SeqList&L2)多项式相加
三、源程序代码
#include
#include
#include
#include"Linkpoly.h"
#include"Seqpoly.h"
voidmain()
{
cout<<"现在进行第一次测试。
(链表表示)"< doublesum; inti,e,n,pos; floata,x; NodeType*pa,*pb,*pp; InitPoly(pa);//初始化多项式 InitPoly(pb); cout<<"请输入要测试的项数: "; cin>>n; cout<<"请依次输入要测试的各项的系数和指数: "; for(i=0;i cin>>a; cin>>e; InsertPoly(pa,a,e);//插入一项 pa=pa->next; } pa=pa->next; cout<<"该多项式为: "; TraversePoly(pa);//输出多项式 cout< cout<<"现在进行删除测试,请输入要删除的项的系数和指数以及pos值: "; cin>>a; cin>>e; cin>>pos; if(DeletetPoly(pa,a,e,pos)){ cout<<"删除成功! 现在多项式为: "; TraversePoly(pa); cout< } else cout<<"删除失败! "< cout<<"请输入X的值,进行多项式计算: "; cin>>x; sum=PolySum(pa,x); cout<<"该多项式的值为: "< cout<<"请输入另一个多项式的项数: "; cin>>n; cout<<"请输入该多项式的各项系数和指数: "; for(i=0;i cin>>a; cin>>e; InsertPoly(pb,a,e);//插入一项 pb=pb->next; } pb=pb->next; pp=PolyAdd(pa,pb); cout<<"两多项式相加后得到的多项式为: "; TraversePoly(pp); cout< ClearPoly(pa); ClearPoly(pb); ClearPoly(pp); cout< cout< cout<<"现在进行第二次测试。 (顺序表表示)"< ListTypes,t,q; InitPoly1(s); InitPoly1(t); InitPoly1(q); cout<<"请输入要测试的项数: "; cin>>n; cout<<"请依次输入要测试的各项的系数和指数: "; for(i=0;i cin>>a; cin>>e; InsertPoly1(s,a,e); } cout<<"该多项式为: "; TraversePoly1(s); cout< cout<<"现在进行删除测试,请输入要删除的项的系数和指数以及pos值: "; cin>>a; cin>>e; cin>>pos; if(DeletetPoly1(s,a,e,pos)){ cout<<"删除成功! 现在多项式为: "; TraversePoly1(s); cout< } else cout<<"删除失败! "< cout<<"请输入X的值,进行多项式计算: "; cin>>x; sum=PolySum1(s,x); cout<<"该多项式的值为: "< cout<<"请输入另一个多项式的项数: "; cin>>n; cout<<"请输入该多项式的各项系数和指数: "; for(i=0;i cin>>a; cin>>e; InsertPoly1(t,a,e);//插入一项 } q=PolyAdd1(s,t); cout<<"两多项式相加后得到的多项式为: "; TraversePoly1(q); cout< ClearPoly1(s); ClearPoly1(t); ClearPoly1(q); } Linkploy.h: structNodeType{ floatcoef; intexp; NodeType*next; }; boolInitPoly(NodeType*&p)//初始化多项式 { if((p=newNodeType)==NULL) returnfalse; p->next=p; returntrue; } voidTraversePoly(NodeType*p)//输出多项式 { NodeType*h=p->next; if(h! =p){ cout< h=h->next; } while(h! =p){ if(h->coef>0) cout<<"+"; cout< h=h->next; } } voidClearPoly(NodeType*&p)//清除多项式 { NodeType*cp,*np; cp=p->next; while(cp! =p){ np=cp->next; deletecp; cp=np; } p->next=p; } boolInsertPoly(NodeType*&p,floata,inte)//插入一项 { NodeType*h; if((h=newNodeType)==NULL) returnfalse; h->coef=a; h->exp=e; h->next=p->next; p->next=h; returntrue; } boolDeletetPoly(NodeType*&p,floata,inte,intpos)//删除一项 { if(pos>1||pos<-1) returnfalse; NodeType*cp=p->next; NodeType*np=p; if(pos==0){ while(cp! =p){ if(cp->coef==a&&cp->exp==e) break; else{ np=cp; cp=cp->next; } } } elseif(pos==-1) while(cp! =p){ np=cp; cp=cp->next; } np->next=cp->next; deletecp; returntrue; } doublePolySum(NodeType*p,floatx)//多项式求值 { inti; doublesum=0,item; NodeType*cp=p->next; while(cp! =p){ item=1; for(i=1;i<=cp->exp;i++) item=item*x; sum=sum+item*cp->coef; cp=cp->next; } returnsum; } NodeType*PolyAdd(NodeType*p1,NodeType*p2)//多项式相加 { floatcoef; NodeType*a=p1->next,*b=p2->next,*c,*pc; InitPoly(c); pc=c; while(a! =p1&&b! =p2){ if(a->exp==b->exp){ coef=a->coef+b->coef; if(coef! =0){ InsertPoly(pc,coef,a->exp); pc=pc->next; } a=a->next; b=b->next; } elseif(a->exp InsertPoly(pc,a->coef,a->exp); pc=pc->next; a=a->next; } else{ InsertPoly(pc,b->coef,b->exp); pc=pc->next; b=b->next; } } while(a! =p1){ InsertPoly(pc,a->coef,a->exp); pc=pc->next; a=a->next; } while(b! =p2){ InsertPoly(pc,b->coef,b->exp); pc=pc->next; b=b->next; } returnc; } Seqploy.h: #defineMaxSize10000 structListType{ float*list; intsize; }; voidInitPoly1(ListType&p)//初始化多项式 { p.list=(float*)malloc(MaxSize*sizeof(float)); if(p.list==NULL){ cout<<"动态可分配的储存空间用完,退出运行! "< exit (1); } p.size=0; for(inti=0;i p.list[i]=0; } voidTraversePoly1(ListTypep)//输出多项式 { inti=0; if(p.list[i]! =0) cout< else{ for(i=1;i if(p.list[i]! =0) break; cout< } for(i=i+1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 上机 作业 DOC