数据结构实验代码.docx
《数据结构实验代码.docx》由会员分享,可在线阅读,更多相关《数据结构实验代码.docx(12页珍藏版)》请在冰豆网上搜索。
![数据结构实验代码.docx](https://file1.bdocx.com/fileroot1/2022-11/24/bfd0e153-2250-4969-a6fc-c805f3e09335/bfd0e153-2250-4969-a6fc-c805f3e093351.gif)
数据结构实验代码
《数据结构》实验代码
实验一:
针对链式或顺序存储的线性表实现指定的操作
题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;
}