数据结构一元多项式的表Word格式文档下载.docx
- 文档编号:22007999
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:8
- 大小:55.65KB
数据结构一元多项式的表Word格式文档下载.docx
《数据结构一元多项式的表Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构一元多项式的表Word格式文档下载.docx(8页珍藏版)》请在冰豆网上搜索。
}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语言,为以后的数据结构课程的学习和其后的上机实验做好了准备。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 一元 多项式