数据结构实验代码.docx

上传人:b****6 文档编号:3608652 上传时间:2022-11-24 格式:DOCX 页数:12 大小:16.33KB
下载 相关 举报
数据结构实验代码.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

数据结构实验代码

《数据结构》实验代码

实验一:

针对链式或顺序存储的线性表实现指定的操作

题1问题描述:

有两个指数递减的一元多项式,写一程序先求这两个多项式的和,再求它们的积。

基本要求:

用带表头结点的单链表作为多项式的存储表示;要建立两个单链表;多项式相加就是要把一个单链表中的结点插入到另一个单链表中去,要注意插入、删除操作中指针的正确修改。

题2问题描述:

编号为1,2,···,n的n个人围坐在一圆桌旁,每人持有一个正整数的密码。

从第一个人开始报数,报到一个预先约定的正整数m时,停止报数,报m的人退席,下一个人又重新从1开始报数,依此重复,直至所有的人都退席。

编一程序输出他们退席的编号序列。

例如,设m=20,n=7,7个人的密码依次是3,1,7,2,4,8,4,则退席的人的编号依次为6,1,4,7,2,3,5。

基本要求:

用不带表头结点的循环单链表表示围成圆圈的n个人;要求建立此循环单链表;某人离席相当于删除一个结点,要正确设置程序中循环终止的条件和删除结点时指针的修改变化。

//实验1.1代码

#include

usingnamespacestd;

structpoNode

{

floatcoef;

intexpn;

poNode*next;

};

classPolynomail

{

public:

Polynomail(intm=0);

~Polynomail();

intPrint();

intPolynLength();

Polynomail&AddPolyn(Polynomail&P2,Polynomail&P3);

Polynomail&MultiplyPolyn(Polynomail&P2,Polynomail&P4);

private:

intInsertpoNode();

poNode*first;

};

intmain()

{

intm;

cout<<"输入多项式P1项数"<

cin>>m;

PolynomailP1(m);

if(P1.PolynLength()!

=m)

{

cout<<"error!

"<

return-1;

}

cout<<"输入多项式P2项数"<

cin>>m;

PolynomailP2(m);

if(P2.PolynLength()!

=m)

{

cout<<"error!

"<

return-1;

}

cout<<"多项式P1:

";

P1.Print();

cout<<"多项式P2:

";

P2.Print();

PolynomailP3;

P3=P1.AddPolyn(P2,P3);

cout<<"P1+P2:

";

P3.Print();

PolynomailP4;

P4=P1.MultiplyPolyn(P2,P4);

cout<<"P1*P2:

";

P4.Print();

return0;

}

intPolynomail:

:

InsertpoNode()

{if(first==NULL)

{

first=newpoNode;

cout<<"输入系数和指数:

"<

cin>>first->coef;

cin>>first->expn;

first->next=NULL;

}

else

{

poNode*p=newpoNode;

poNode*q=first;

cout<<"输入系数和指数:

"<

cin>>p->coef;

cin>>p->expn;

poNode*r;

while(q->next!

=NULL&&q->expnexpn)

{

r=q;

q=q->next;

}

if(q==first&&q->next!

=NULL)

{

if(q->expn==p->expn)

{

return-1;

}

p->next=q;

first=p;

}

elseif(q==first&&q->next==NULL)

{

if(p->expnexpn)

{

p->next=q;

first=p;

}

elseif(p->expn>q->expn)

{

q->next=p;

p->next=NULL;

}

else

{

return-1;

}

}

elseif(q->next==NULL&&q!

=first&&p->expn>q->expn)

{

q->next=p;

p->next=NULL;

}

else

{

if(q->expn==p->expn)

{

return-1;

}

r->next=p;

p->next=q;

}

}

return0;

}

Polynomail:

:

Polynomail(intm)

{

first=NULL;

inti;

for(i=0;i

{

intr=InsertpoNode();

if(r==-1)break;

}

}

intPolynomail:

:

Print()

{

poNode*p=first;

cout<<"f(x)=";

if(first==NULL)cout<<"NULL"<

while(p!

=NULL)

{

cout<coef<<"*x^"<expn;

if(p->next==NULL)cout<

elsecout<<"+";

p=p->next;

}

return0;

}

Polynomail:

:

~Polynomail()

{

poNode*p=first;

while(p!

=NULL)

{

p=p->next;

deletefirst;

first=p;

}

}

intPolynomail:

:

PolynLength()

{

inti=0;

poNode*p=first;

while(p!

=NULL)

{

p=p->next;

i++;

}

returni;

}

Polynomail&Polynomail:

:

AddPolyn(Polynomail&P2,Polynomail&P3)

{

poNode*p=first;

poNode*q=P2.first;

P3.first=newpoNode;

poNode*r=P3.first;

while(p!

=NULL&&q!

=NULL)

{

if(p->expn==q->expn)

{

r->coef=p->coef+q->coef;

r->expn=p->expn;

p=p->next;

q=q->next;

}

elseif(p->expnexpn)

{

r->coef=p->coef;

r->expn=p->expn;

p=p->next;

}

else

{

r->coef=q->coef;

r->expn=q->expn;

q=q->next;

}

if(p!

=NULL||q!

=NULL)

{

r->next=newpoNode;

r=r->next;

}

elser->next=NULL;

}

while(p!

=NULL||q!

=NULL)

{

if(p!

=NULL)

{

r->coef=p->coef;

r->expn=p->expn;

p=p->next;

}

else

{

r->coef=q->coef;

r->expn=q->expn;

q=q->next;

}

if(p!

=NULL||q!

=NULL)

{

r->next=newpoNode;

r=r->next;

}

elser->next=NULL;

}

returnP3;

}

Polynomail&Polynomail:

:

MultiplyPolyn(Polynomail&P2,Polynomail&P4)

{

poNode*p=first;

while(p!

=NULL)

{

PolynomailP3;

poNode*q=P2.first;

P3.first=newpoNode;

poNode*r=P3.first;

r->coef=p->coef*q->coef;

r->expn=p->expn+q->expn;

q=q->next;

while(q!

=NULL)

{

r->next=newpoNode;

r=r->next;

r->coef=p->coef*q->coef;

r->expn=p->expn+q->expn;

q=q->next;

}

r->next=NULL;

P4=P4.AddPolyn(P3,P4);

p=p->next;

}

returnP4;

}

 

//实验1.2代码

#include

usingnamespacestd;

structnumNode

{

intkey;

intnum;

numNode*next;

};

intCreatCircleList(numNode*now,intlength);

intLoop(numNode*now,intm);

intmain()

{

intm;

intn;

numNode*now=newnumNode;

cout<<"请输入人数:

"<

cin>>n;

cout<<"请输入初始数m:

"<

cin>>m;

CreatCircleList(now,n);

Loop(now,m);

return0;

}

intCreatCircleList(numNode*now,intlength)

{

if(length<=0)

{

cout<<"error!

"<

return-1;

}

now->num=1;

cout<<"请输入编号为1的人拥有的密码。

"<

cin>>now->key;

numNode*p=now;

inti;

for(i=1;i

{

p->next=newnumNode;

p=p->next;

p->num=i+1;

cout<<"请输入编号为"<

"<

cin>>p->key;

}

p->next=now;

return0;

}

intLoop(numNode*now,intm)

{

cout<<"退席的人编号依次为:

"<

numNode*s1=now;

numNode*s2=now;

numNode*temp;

while(s1->next!

=now)

{

s1=s1->next;

}

while(s1->num!

=s2->num)

{

for(inti=0;i

{

temp=s1;

s1=s1->next;

s2=s2->next;

}

cout<num<<"";

temp->next=s2;

m=s1->key;

deletes1;

s1=temp;

}

cout<num<

return0;

}

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

当前位置:首页 > 高中教育 > 语文

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

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