《数据结构课程设计》报告一元稀疏多项式计算器.docx
《《数据结构课程设计》报告一元稀疏多项式计算器.docx》由会员分享,可在线阅读,更多相关《《数据结构课程设计》报告一元稀疏多项式计算器.docx(13页珍藏版)》请在冰豆网上搜索。
《数据结构课程设计》报告一元稀疏多项式计算器
《数据结构课程设计》报告
一元稀疏多项式计算器
[问题描述]
设计简单的一个一元稀疏多项式计算器。
[基本要求]
一元稀疏多项式简单计算器的基本功能是:
(1)输入并建立多项式,以带头结点的单链表存储;
(2)输出多项式,输出形式为整数序列:
n,c1,e1,c2,e2,,,,,,,cn,en,其中n是多项式的项数,ci,ei,分别是第i项的系数和指数,序列按指数降序排序;
(3)多项式a和b相加,建立多项式a+b;
(4)多项式a和b相减,建立多项式a-b;
(5)多项式a和b相乘,建立多项式a*b;
[数据结构设计]
在模拟多项式时,为了简化处理,只取最核心的两个数据:
多项式的系数和指数,具体数据结构定义如下:
typedefstructnode{
intxs;/*系数*/
intzs;/*指数*/
structnode*next;/*next指针*/
}Dnode,*Dnodelist;
[功能函数设计]
(1)链表初始化函数Creat_node()
(2)多项式数据的输入函数input()
(3)数据的插入函数Insert_node()
(4)多项式的显示函数output()
(6)多项式的运算函数:
新建链表存储计算后的多项式
多项式相乘Mulresult()
多项式相加Addresult()
多项式相减Subresult()
(7)主函数main()
创建两个多项式的链表并且初始化,分别调用相应的多项式创建函数,创建成功后选择运算方式,再将运算结果输出显示。
【实现过程】
1、在D:
根目录下建立文件夹,命名方式为“班级”+“顺序号(两位)+“姓名”,例如你是商务1419班的,你在学生花名册上的顺序号是05号,你的姓名是张有才,则文件夹的名
字是“商务141905张有才”。
这个文件夹就是你的工作文件夹。
2、在VC中创建c++源程序,命名为“poly.c”,保存在工作文件夹中;
3、在poly.c中输入以下内容并编译,使没有语法错误:
#include
#include
typedefstructnode{
intxs;
intzs;
structnode*next;
}Dnode,*Dnodelist;/*定义结构体*/
DnodelistCreat_node(void)/*链表初始化*/
{
DnodelistD;
D=(Dnodelist)malloc(sizeof(Dnode));
if(D)
D->next=NULL;
returnD;
}
4、回答问题,以上程序中,Creat_node(void)函数的功能是什么?
答:
创建链表里面的一个节点。
5、在poly.c中完成如下函数,并编译。
intInsert_node(DnodelistD,intxs,intzs)/*插入函数*/
{
Dnodelistp;
Dnodelistq;
Dnodelistr;
p=D;
while(p->next)
{
r=p;
p=p->next;
if(zs==p->zs)
{
p->xs=p->xs+xs;
return1;
}
elseif(zs>p->zs){
q=Creat_node();
q->xs=xs;
q->zs=zs;
r->next=q;
q->next=p;
return1;
}
}/*while(p->next)*/
q=Creat_node();
q->xs=xs;
q->zs=zs;
q->next=p->next;
p->next=q;
return1;
free(p);
free(q);
free(r);
}
函数功能:
将一项合并到多项式中。
参数说明:
D:
一个带头结点的单链表的头指针,其中按指数降序存放一个一元多项式的数据;
xs:
要合并的项的系数;
zs:
要合并的项的指数。
6、在poly.c中完成如下函数,并编译。
voidoutput(DnodelistD){
Dnodelistr;
r=D->next;
printf("%dx^%d",r->xs,r->zs);
r=r->next;
while(r!
=NULL)
{
if(r->xs>0)
printf("+%dx^%d",r->xs,r->zs);
else
printf("%dx^%d",r->xs,r->zs);
r=r->next;
}
printf("\n");}
函数功能:
以类似“-3*x^100+2*x^10-10”的形式输出D中存放的多项式数据。
7、在poly.c中输入以下函数,并编译。
Dnodelistinput(void){
DnodelistD;
intxs,zs;
D=Creat_node();
printf("请输入系数和指数(系数,指数):
");
scanf("%d,%d",&xs,&zs);
while(xs!
=0&&zs!
=0){
Insert_node(D,xs,zs);
printf("请输入系数和指数(系数,指数):
");
scanf("%d,%d",&xs,&zs);
}
returnD;
}
你认为以上函数的功能是什么?
答:
从键盘输入系数和指数存放在链表中。
8、在poly.c中输入以下main()函数,并编译。
voidmain(void){
DnodelistD;
D=input();
output(D);
}
9、运行你的程序,输入以下数据:
-3,100
2,10
-10,1
0,0
将你的程序的运行结果的界面粘贴在下面:
10、在poly.c中完成以下函数,其功能是计算D1和D2中两个多项式的和,函数返回和多项式。
DnodelistAddresult(DnodelistD1,DnodelistD2)
{
DnodelistD;
Dnodelistp,q;
intx,z;
D=Creat_node();
p=D1->next;
q=D2->next;
while(q)
{
x=q->xs;
z=q->zs;
Insert_node(D,x,z);
q=q->next;
}
while(p)
{
x=p->xs;
z=p->zs;
Insert_node(D,x,z);
p=p->next;
}
returnD;
}
11、在poly.c中完成以下两个函数,其功能分别是是计算两个多项式的差和乘积。
DnodelistSubresult(DnodelistD1,DnodelistD2){
DnodelistD;
Dnodelistp,q;
intx,z;
D=Creat_node();
p=D1->next;
q=D2->next;
while(p&&q)
{
if((p->zs)<(q->zs))
{
x=-(q->xs);
z=q->zs;
Insert_node(D,x,z);
q=q->next;
}
elseif((p->zs)>(q->zs))
{
x=p->xs;
z=p->zs;
Insert_node(D,x,z);
p=p->next;
}
else
{
z=q->zs;
x=(p->xs)-(q->xs);
Insert_node(D,x,z);
p=p->next;
q=q->next;
}
}
while(p)
{
x=p->xs;
z=p->zs;
Insert_node(D,x,z);
p=p->next;
}
while(q)
{
x=-(q->zs);
z=q->zs;
Insert_node(D,x,z);
q=q->next;
}
returnD;
}
DnodelistMulresult(DnodelistD1,DnodelistD2){
DnodelistD;
Dnodelistp,q;
intx,z;
D=Creat_node();
p=D1->next;
q=D2->next;
while(q)
{
while(p)
{
x=p->xs*q->xs;/*系数相乘,指数相加*/
z=p->zs+q->zs;
Insert_node(D,x,z);
p=p->next;
}
p=D1->next;
q=q->next;
}
returnD;
}
12、编写main函数,功能输入两个多项式的数据,计算并输出和、差、积多项式,把程序运行结果的界面粘贴在下面。
[收获和建议]
1、通过本次课程设计,你都有哪些收获,请写在下面。
通过这次课程设计,我感觉到要真正做出一个程序并不很容易,但只要用心去做,总会有收获,特别是当我遇到问题,查资料,问同学,想尽办法去解决,最后终于找到方法时,心里的那份喜悦之情真是难以形容.编写程序中遇到问题再所难免,应耐心探究其中的原因,从出现问题的地方起,并联系前后程序,仔细推敲,逐个排查.直到最终搞清为止。
“享受制作过程追求更加完美”是我对实训的总结。
2、你对这门课程教学内容和方法有什么好的建议,请写在下面。
通过这次课程设计我觉得我们学习《数据结构》的方法存在一定的弊端,《数据结构》的效果直接影响到我们对其它专业课的学习和今后业务的成长。
我觉得我们对于《数据结构》的学习不仅包括理论部分的学习,还要让我们勤动手,多实践。
整个实验过程要结合教学进度与我们的实际情况,制定实验的内容。
实验分两部分,一是验证性的,主要结合课堂理论教学内容展开,学生可以对在课堂上学到的基本算法进行验证;二是设计性实验,坚持“学以致用”的原则,目的是让学生充分利用所学的理论知识进行相对复杂的应用设计,以进一步提高综合能力和创新实践能力。
而在传统的课堂教学中,一般采用的是“教师――黑板——学生”的教学模式,这对大多数教师和学生来说,“教”和“学”很难在课堂中得到良好的协调,因而也就难以对教学内容进行及时而有效地消化,“听懂但不会做”是大部分学生的通病,从而使教学效果受到影响。
所以我希望以后的数据结构的学习能够注重实验上机.