数据结构一元多项式的表Word格式文档下载.docx

上传人:b****6 文档编号:22007999 上传时间:2023-02-02 格式:DOCX 页数:8 大小:55.65KB
下载 相关 举报
数据结构一元多项式的表Word格式文档下载.docx_第1页
第1页 / 共8页
数据结构一元多项式的表Word格式文档下载.docx_第2页
第2页 / 共8页
数据结构一元多项式的表Word格式文档下载.docx_第3页
第3页 / 共8页
数据结构一元多项式的表Word格式文档下载.docx_第4页
第4页 / 共8页
数据结构一元多项式的表Word格式文档下载.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

数据结构一元多项式的表Word格式文档下载.docx

《数据结构一元多项式的表Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构一元多项式的表Word格式文档下载.docx(8页珍藏版)》请在冰豆网上搜索。

数据结构一元多项式的表Word格式文档下载.docx

}Lnode,*Linklist;

//定义新的变量类型

2)建立多项式存储线性链表头结点

voidmakehead(Linklist&

head){

head=(Linklist)malloc(sizeof(Lnode));

//建立新的节点

head->

exp=-1;

next=NULL;

//指针赋空

cof=1;

}

3)将输入的多项式信息存储于节点中

voidmakelnode(Lnode*&

p){

p=(Lnode*)malloc(sizeof(Lnode));

printf("

Inputthecofandexp\n"

);

scanf("

%fx%d"

&

p->

cof,&

exp);

//输入多项式底数指数信息

p->

4)清除系数为零的多项式节点

voidclear(Linklistla){

Lnode*p,*q;

//定义两个指向结构体的指针

p=la;

q=p->

next;

while(q){

if(fabs(q->

cof)<

=0.000001){//判断系数为零

p->

next=q->

//指针指向相隔的下一个节点

free(q);

//销毁系数为零的节点

q=p->

//指针后移一位

}

else{

p=p->

//pq分别后移一位

q=q->

}

5)找到多项式中与当前节点同指数项位置

intlocate(Linklistl,Lnode*&

p,Lnode*e){

p=l;

//标记表头

if(!

l->

next)

return(0);

while(p&

&

e->

exp!

=p->

exp){//当p存在且指数不相等时指针后移

p=p->

if(p)

return(p);

//当p存在时,返回p地址

else{//没找到时寻找出插入位置

p=l;

while(p->

next&

exp<

next->

exp)

if(!

next){

p=p;

return(0);

6)将多项式节点插入已有多项式链表中,同时完成系数运算

voidcaseinsert(Linklist&

l,Lnode*e){

Lnode*p;

if(locate(l,p,e)){//指数相同项系数相加

cof+=e->

cof;

free(e);

}

else{//插入新的项

e->

next=p->

next=e;

7)创建新的多项式链表

voidcreat(Linklist&

head,intm){

inti;

makehead(head);

//建立头结点

for(i=1;

i<

=m;

i++){

p=(Linklist)malloc(sizeof(Linklist));

//建立新的多项式单个节点空间

makelnode(p);

//建立赋值

caseinsert(head,p);

//将多项式节点插入已有多项式链表中,同时完成系数运算

clear(head);

8)输入多项式项数并创建节点进行存储

voidinput(Linklist&

l){

intm;

InputthePolynumbers\n"

%d"

m);

creat(l,m);

//建立一个l指向的头指针有m项的多项式链表

9)输出多项式

voidprint(Linklistl){

p=l->

Poly:

%6fx^%d"

p->

cof,p->

p=p->

while(p){

if(p->

cof>

0)printf("

+"

//系数正负号

if(fabs(p->

=0.000001);

break;

//不输出系数为零的项

printf("

//指针后移

\n"

10)进行多项式加法运算

voidadd(Linklistla,Linklistlb,Linklist&

lc)

{Lnode*p,*q,*q1,*p1;

p=la->

q=lb->

makehead(lc);

//建立一个新的表头

while(p){

p1=p->

caseinsert(lc,p);

//将多项式节点p插入已有多项式链表lc中,同时完成系数运算

p=p1;

while(q){

q1=q->

caseinsert(lc,q);

//将多项式节点q插入已有多项式链表lc中,同时完成系数运算

q=q1;

11)将减项多项式转化为系数为相反数的多项式便于转化为加法运算

voidreverse(Linklist&

Linklistp;

p->

cof*=-1;

//系数自乘-1

12)进行多项式减法运算

voidsub(Linklistla,Linklistlb,Linklist&

lc){

reverse(lb);

add(la,lb,lc);

clear(lc);

//清除头结点

13)对x赋值进行多项式赋值运算

floatvalue(Linklistl,floatx){

floatsum=0,t;

inti;

Linklistp=l->

while(p){t=1;

for(i=p->

exp;

i>

0;

i--)

t*=x;

sum=sum+t*p->

return(sum);

14)销毁已有多项式,清除已有多项式占用的存储空间

voiddestroy(Linklistla){

q=p;

free(q);

15)创建主程序即菜单界面

voidmain(){

Linklistl[10];

intc,n,m,i;

floata;

Choosethenumbertooperate:

1:

CreataPoly\n"

2:

PolyAddition\n"

3:

PolySubstraction\n"

4:

Evaluation\n"

5:

DestroyaPoly\n"

6:

PrintaPoly\n"

0:

Exit\n"

\nDestroythePolysafterused.\n"

\n*use'

'

toseparate\n"

c);

while(c){

switch(c){

case1:

InputthePolynumber1~9\n"

scanf("

n);

input(l[n]);

break;

case2:

InputthePolynumbertoadd,andthePolynumberstoredin\n"

%d,%d,%d"

n,&

m,&

i);

add(l[n],l[m],l[i]);

case3:

InputthePolynumbertosubtract,andthePolynumberstoredin\n"

sub(l[n],l[m],l[i]);

case4:

Inputthenumbertooperateandthevalueofx:

%d,%f"

a);

printf("

%f\n"

value(l[n],a));

case5:

InputthePolynumber:

destroy(l[n]);

case6:

InputthePolynumber:

print(l[n]);

case0:

n=0;

default:

printf("

ERROR!

"

Choosethenumbertooperate:

scanf("

OK!

程序运行截图:

实验总结:

这次实验室数据结构第一次上机实验,由于与C语言课程的学习相隔已经一个学期,对C语言有些生疏和遗忘,在编程过程中出现很多错误。

再加上本次实验的函数较多,在最后编译的时候出现了大量errors和warnings,不得不耐心地逐行检查,最终才得以完成这次试验。

总体来说,这次实验使我及时复习了C语言,为以后的数据结构课程的学习和其后的上机实验做好了准备。

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

当前位置:首页 > 工作范文 > 其它

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

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