线性表实验报告.docx
《线性表实验报告.docx》由会员分享,可在线阅读,更多相关《线性表实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
线性表实验报告
闽江学院电子系
实验报告
学生姓名:
班级:
学号:
课程:
算法与数据结构
一、实验题目:
:
线性表的综合应用
一、实验地点:
实验楼A210
二、实验目的:
1.掌握线性表的逻辑特征
2.掌握线性表顺序存储结构的特点,熟练掌握顺序表的基本运算
3.熟练掌握线性表的链式存储结构定义及基本操作
4.掌握顺序表和链表的概念,学会对问题进行分析,选择恰当的逻辑结构和物理结构
5.加深对顺序表和链表的理解,培养解决实际问题的编程能力
三、实验内容:
实现一元稀疏多项式的表示及基本操作(建立、销毁、输出、加法、减法、乘法等操作)
四、实验环境(使用的软硬件):
VisualC++集成开发环境
5、实验步骤及操作
1.启动VC++;
2.新建工程/Win32ConsoleApplication,选择输入位置:
输入工程的名称:
xianxingbiao;
按“确定”按钮,选择“AnEmptyProject”,再按“完成”按钮,
3.新建文件/C++SourceFile,选中“添加到工程的复选按钮”,输入文件名“1.cpp”,按“确定”
按钮,在显示的代码编辑区内输入如下的参考程序:
#include
#include
#include
#defineNULL0
#defineMAXSIZE20
typedefstruct
{
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;
}
else
{
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(i>p->last)
{
return0;
}
else
{
return1;
}
}
intInsert_ElementByOrder(polynomial*p,termx)
{
intj;
if(PloynStatus(p)==-1)
return0;
if(p->last==MAXSIZE-1)
{
cout<<"Thepolymisfull!
"<return0;
}
j=p->last;
while(p->terms[j].expn=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(m>MAXSIZE)
{
printf("顺序表溢出\n");
return0;
}
else
{
printf("请依次输入%d对系数和指数...\n",m);
for(inti=0;i{
scanf("%f%d",&coef,&expn);
x.coef=coef;
x.expn=expn;
if(!
Location_Element(P,x))
{
Insert_ElementByOrder(P,x);
}
}
}
return1;
}
charcompare(termterm1,termterm2)
{
if(term1.expn>term2.expn)
{
return'>';
}
elseif(term1.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)
{
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;
}
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].coef>0&&i>0)
cout<<"+"<terms[i].coef;
else
cout<terms[i].coef;
cout<<"x^"<terms[i].expn;
}
cout<}
voidmenu()
{
cout<<"\t\t*******数据结构综合性实验*********"<cout<<"\t\t***一、多项式的加、减、乘法运算***"<cout<<"\t\t*******1.多项式创建*********"<cout<<"\t\t*******2.多项式相加*********"<cout<<"\t\t*******3.多项式相减*********"<cout<<"\t\t*******4.多项式相乘*********"<cout<<"\t\t*******5.清空多项式*********"<cout<<"\t\t*******0.退出系统*********"<cout<<"\t\t******请选择(0-5)********"<cout<<"\t\t***********************************"<}
voidmain()
{
intsel;
polynomial*p1=NULL;
polynomial*p2=NULL;
polynomial*p3=NULL;
while
(1)
{
menu();
cout<<"\t\t*请选择(0-5):
";
cin>>sel;
switch(sel)
{
case1:
p1=Init_Polynomial();
p2=Init_Polynomial();
intm;
printf("请输入第一个多项式的项数:
\n");
scanf("%d",&m);
CreatePolyn(p1,m);
printf("第一个多项式的表达式为p1=");
printPloyn(p1);
printf("请输入第二个多项式的项数:
\n");
scanf("%d",&m);
CreatePolyn(p2,m);
printf("第二个多项式的表达式为p2=");
printPloyn(p2);
break;
case2:
printf("p1+p2=");
if((p3=subStractPloyn(p1,p2))!
=NULL)
printPloyn(p3);
break;
case3:
printf("\np1-p2=");
if((p3=subStractPloyn(p1,p2))!
=NULL)
printPloyn(p3);
break;
case4:
printf("\np1*p2=");
if((p3=mulitPloyn(p1,p2))!
=NULL)
printPloyn(p3);
case5:
Reset_Polynomial(p1);
Reset_Polynomial(p2);
Reset_Polynomial(p3);
break;
case0:
return;
}
}
return;
}
4.按F7键,或工具图标进行工程的建立,如有错误,根据错误显示区中的提示,改正错误,重新建立
应用程序;
5.按Ctrl+F5键,或工具图标进行工程的执行。
六、实验结果:
(1)(2x+5x8-3.1x11)+(7-5x8+11x9)
程序运行结果为:
(2)(6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2+7.8x15)
程序运行结果为:
(3)(x+x2+x3)+0
程序运行结果为:
(4)(x+x3)-(-x-x-3)
程序运行结果为:
五、实验总结及心得体会:
在“一元多项式的加、减、乘法运算实现”中主要使用了线性表的基本操作,使我更进一步理解线性表的顺序存储和链式存储结构,熟练线性表的插入、删除等基本功能;我的程序设计思想和代码的编写和调试能力在此次课设期间有所提高。
这样一种更贴切实际的课程设计,更能提高我的学习效率,让我真正理解这门课程的知识要点。
六、对本实验过程及方法、手段的改进建议:
报告评分:
指导教师签字:
批阅日期: