线性表及其应用多项式相加相乘.docx

上传人:b****5 文档编号:12284627 上传时间:2023-04-17 格式:DOCX 页数:12 大小:104.24KB
下载 相关 举报
线性表及其应用多项式相加相乘.docx_第1页
第1页 / 共12页
线性表及其应用多项式相加相乘.docx_第2页
第2页 / 共12页
线性表及其应用多项式相加相乘.docx_第3页
第3页 / 共12页
线性表及其应用多项式相加相乘.docx_第4页
第4页 / 共12页
线性表及其应用多项式相加相乘.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

线性表及其应用多项式相加相乘.docx

《线性表及其应用多项式相加相乘.docx》由会员分享,可在线阅读,更多相关《线性表及其应用多项式相加相乘.docx(12页珍藏版)》请在冰豆网上搜索。

线性表及其应用多项式相加相乘.docx

线性表及其应用多项式相加相乘

 

福建农林大学计算机与信息学院

(程序设计类课程)

实验报告

 

课程名称:

数据结构

姓名:

邓建国

系:

计算机与信息

专业:

网络工程

年级:

09级

学号:

091154050

指导教师:

黄思先

职称:

副教授

 

福建农林大学计算机与信息学院实验报告

系:

计算机与信息专业:

网络工程年级:

09级

姓名:

邓建国学号:

*********实验室号:

___计算机号:

实验一线性表及其应用(多项式相加、相乘)

一、实验目的和要求

1、熟悉tc的运行环境,并可以熟练的使用tc;

2、掌握链表存储的方法以及基本操作;

3、掌握内存的动态分配和释放方法;

4、熟悉C语言程序的基本格式与规范。

二、实验内容和原理

1、实验内容:

设计一个一元多项式的简单计算程序,其基本功能有:

(1)输入并建立多项式;

(2)输出多项式;(3)多项式的相加减;(4)多项式的相乘。

利用单链表实现。

2、实验原理:

将两多项式存入链表lianbiao1、lianbiao2,用pointer1扫描lianbiao1,pointer2扫描lianbiao2,结果保存在lianbiao3中(用pointer3来创建lianbiao3)

三、实验环境

硬件:

(1)学生用微机

(2)多媒体实验教室

(3)局域网环境

软件:

(1)WindowsXP中文操作系统

(2)TurboC3.0

四、算法描述及实验步骤

1、描述

1.定义创建链表的函数,然后创建三个链表,一个用于存放结果。

2.定义多项式相加的函数实现多项式的相加功能,定义多项式的相乘功能。

3.定义打印链表和释放链表的函数。

4.最后在主函数里面调用这些函数,实现多项式的相加和相乘。

例子:

A(X)=3X+7X6-9X9B(X)=2X-3+7-3X+8X3+X5

(1)执行加法操作,输出“lianbiao1+lianbiao2:

(2,-3)(7,0)(8,5)(1,5)(7,6)(-9,9)”

(2)执行乘法操作,输出“lianbiao1*lianbiao2:

(6,-2)(21,1)(-9,2)(14,3)(55,6)(3,6)(-21,7)(-63,9)(27,10)(56,11)(7,11)(-72,14)(-9,14)”

2、框图

3、代码(注释)

#include"stdio.h"/*输入输出函数的头文件*/

#include"alloc.h"/*alloc.h是动态分配内存空间头文件*/

typedefstructnode/*定义节点,包含两个数据域(c和e)和一个指针域(*next)*/

{

intc,e;/*c是指多项式的系数,e是项的指数*/

structnode*next;/*定义next为指向下一个结点的指针*/

}Pn;/*定义Pn类型*/

Pn*create()/*创建链表*/

{

Pn*pointer,*lianbiao;

intn;

lianbiao=malloc(sizeof(Pn));/*用malloc动态分配函数给链表分配内存空间*/

printf("n:

");/*提示用户输入多项式的项数*/

scanf("%d",&n);/*接收用户输入的多项式的项数*/

pointer=lianbiao;

while(n)/*对n进行判断,当n不为零时执行while循环语句*/

{

pointer->next=malloc(sizeof(Pn));/*为链表新的节点申请空间*/

pointer=pointer->next;/*将pointer下移*/

printf("ce:

");

scanf("%d%d",&pointer->c,&pointer->e);/*将系数c,指数e存入链表中的新节点*/

n--;/*没当输入一项时,项数n就减一*/

}

pointer->next=NULL;/*如果pointer指向的下一个结点的指针域为空,说明链表已经创建好了*/

returnlianbiao;

}

voidOUT(Pn*lianbiao)/*打印输出链表*/

{

Pn*pointer=lianbiao->next;

while(pointer)/*打印出当前的结点系数c和指数e,直到链表为空*/

{

printf("(%d,%d)",pointer->c,pointer->e);/*打印出多项式系数c和指数e*/

pointer=pointer->next;/*打印出当前结点后,将指针移到下一个节点*/

}

printf("\n");/*用\n换行*/

}

voidFree(Pn*lianbiao)/*释放链表空间*/

{

Pn*pointer=lianbiao;/*将pointer指向头节点*/

while(pointer)/*释放链表中的结点,直到pointer链表为空时推出循体*/

{

lianbiao=lianbiao->next;/*删除当前节点*/

free(pointer);/*释放当前结点的空间*/

pointer=lianbiao;/*当pointer指向头结点指针时结束循环*/

}

}

Pn*add(Pn*lianbiao1,Pn*lianbiao2)/*多项式相加*/

{

Pn*lianbiao3,*pointer3,*pointer1=lianbiao1->next,*pointer2=lianbiao2->next;/*建立新的链表lianbiao3,用于存放lianbiao1与lianbiao2相加后的结果*/

intc,e;/*这里的c为多项式相加后的系数,而e为结点相加后的指数*/

pointer3=lianbiao3=malloc(sizeof(Pn));/*用malloc为lianbiao3申请空间*/

lianbiao3->next=NULL;

while(pointer1||pointer2)/*当pointer1或pointer2不为空时,分成3种情况*/

{

if(pointer1&&(pointer2==NULL||pointer1->ee))/*第一种是当pointer1不空并且pointer2为空,或者pointer1所指的指数e小于pointer2所指的指数e时*/

{

c=pointer1->c;/*将pointer1当前所指结点的系数c赋值给c*/

e=pointer1->e;/*将pointer1当前所指结点的系数e赋值给e*/

pointer1=pointer1->next;/*将pointer1移到下一结点*/

}

elseif(pointer2&&(pointer1==NULL||pointer2->ee))/*第二种是当pointer2不空且pointer1为空或者pointer2所指的指数e小于pointer1所指的指数e时*/

{

c=pointer2->c;

e=pointer2->e;

pointer2=pointer2->next;

}

else/*第三种是当pointer1、pointer2都不为空且pointer1的指数e等于pointer2的指数e时*/

{

c=pointer1->c+pointer2->c;/*将pointer1与pointer2所指的系数相加*/

e=pointer1->e;

pointer1=pointer1->next;/*将pointer1下移*/

pointer2=pointer2->next;/*将pointer2下移*/

}

if(c)

{

pointer3->next=malloc(sizeof(Pn));/*申请新结点的空间*/

pointer3=pointer3->next;/*pointer3下移*/

pointer3->c=c;/*把系数c放入新结点*/

pointer3->e=e;/*把指数e放入新结点*/

}

}

pointer3->next=NULL;/*当所指的指针为NULL时,链表结束*/

returnlianbiao3;/*返回两个多项式相加的结果lianbiao3*/

}

Pn*mx1(Pn*pointer1,Pn*lianbiao2)/*多项式相乘*/

{

Pn*lianbiao3,*pointer3,*pointer2=lianbiao2->next;/*定义链表lianbiao3*/

pointer3=lianbiao3=malloc(sizeof(Pn));/*为lianbiao3申请空间,并将pointer3指向lianbiao3*/

lianbiao3->next=NULL;

while(pointer2)/*当pointer2不为空时,执行while循环*/

{

pointer3->next=malloc(sizeof(Pn));/*为新创结点申请空间*/

pointer3=pointer3->next;/*将pointer3指向新结点*/

pointer3->c=pointer1->c*pointer2->c;/*将pointer1的系数乘以pointer2->c*/

pointer3->e=pointer1->e+pointer2->e;/*将pointer1的指数乘以pointer2->e*/

pointer2=pointer2->next;/*pointer2下移*/

}

pointer3->next=NULL;

returnlianbiao3;/*将结果lianbiao3返回*/

}

Pn*mxm(Pn*lianbiao1,Pn*lianbiao2)/*多项式相乘*/

{

Pn*lianbiao3,*pointer1=lianbiao1->next,*htemp;

lianbiao3=malloc(sizeof(Pn));

lianbiao3->next=NULL;

while(pointer1)/*当pointer1不为空,执行while循环*/

{

htemp=mx1(pointer1,lianbiao2);/*将相乘结果放到链表htemp*/

lianbiao3=add(lianbiao3,htemp);/*将htemp中的多项式加上lianbiao3中的多项式*/

pointer1=pointer1->next;

Free(htemp);/*释放链表htemp*/

}

returnlianbiao3;/*返回结果lianbiao3*/

}

main()

{

Pn*lianbiao1,*lianbiao2,*lianbiao3;/*定义三个链表lianbiao1,lianbiao2,lianbiao3*/

clrscr();

printf("Createlianbiao1\n");

lianbiao1=create();/*创建链表lianbiao1*/

printf("\nPrintflianbiao1\n");

OUT(lianbiao1);/*打印出链表lianbiao1*/

printf("\nCreatelianbiao2\n");

lianbiao2=create();/*创建链表lianbiao2*/

printf("\nPrintflianbiao2\n");

OUT(lianbiao2);/*打印出链表lianbiao2*/

printf("\nlianbiao1+lianbiao2:

");

lianbiao3=add(lianbiao1,lianbiao2);/*把lianbiao1和lianbiao2相加的结果赋给lianbiao3*/

OUT(lianbiao3);/*打印出lianbiao3*/

Free(lianbiao3);/*释放lianbiao3*/

printf("\nlianbiao1*lianbiao2:

");

lianbiao3=mxm(lianbiao1,lianbiao2);/*把lianbiao1和lianbiao2相乘的结果赋给lianbiao3*/

OUT(lianbiao3);/*输出lianbiao3*/

Free(lianbiao1);/*释放lianbiao1*/

Free(lianbiao2);

Free(lianbiao3);

getch();

}

五、调试过程

#include"malloc.h"语句出错,多了一个m,后来改为#include"alloc.h",就编译通过了。

六、实验结果

测试数据

(1):

取两项多项式为:

9+3x

取一项多项式为:

2X-3

实验结果

(1):

这两个项式相加结果为:

lianbiao1+lianbiao2:

2X-3+9+3X

这两个项式相乘结果为:

lianbiao1*lianbiao2:

18X-3+6X-2

实验截图

(1):

测试数据

(2):

取三项多项式为:

(3,1)(7,6)(-9,9)

取五项多项式为:

(2,-3)(7,0)(-3,1)(8,5)(1,5)

实验结果

(2):

这两个项式相加:

lianbiao1+lianbiao2:

(2,-3)(7,0)(8,5)(1,5)(7,6)(-9,9)

这两个项式相乘:

lianbiao1*lianbiao2:

(6,-2)(21,1)(-9,2)(14,3)(55,6)(3,6)(-21,7)(-63,9)(27,10)(56,11)(7,11)(-72,14)(-9,14)

实验截图

(2):

七、总结

通过这次实验我熟悉tc的运行环境,并可以熟练的使用tc,掌握链表存储的方法以及基本操作、内存的动态分配和释放方法并且熟悉C语言程序的基本格式与规范。

附录:

参考文献

[1]宁正元、王秀娟《算法与数据结构》,北京:

清华大学出版社,2006;

[2]严蔚敏、佩娟等《数据结构》,北京:

国防工业出版社,1981;

[3]宁正元《数据结构》-用C语言描述,北京:

中国水利水电出版社,2000

[4]中国计算机科学与技术学科教程2002研究组《中国计算机科学与技术学科教程2002》,北京:

清华大学出版社,2002;

[5]陈小平《数据结构》,南京:

南京大学出版社,1994。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1