}
Pc->next=(struct Polynomial*)malloc(sizeof(struct Polynomial));
Pc=Pc->next;
}
Pc=L;
while(Pa!=NULL&&Pb!=NULL){
Pc->data=Pa->data+Pb->data;
Pc=Pc->next;
Pa=Pa->next;
Pb=Pb->next;
}
if(Pa==NULL){//Pa的长度小于Pb
while(Pb!=NULL){
Pc->data=Pb->data;
Pc=Pc->next;
Pb=Pb->next;
}
}
else if(Pb==NULL){//Pb的长度小于Pa
while(Pa!=NULL){
Pc->data=Pa->data;
Pc=Pc->next;
Pa=Pa->next;
}
}
return L; }
int main(){
int i;
struct Polynomial *Ha,*Hb,*Hc;
printf(\请输入多项式a的最高次系n:\\n\
scanf(\
Ha=Creat_H(n);
printf(\请输入多项式b的最高次系m:\\n\
scanf(\
Hb=Creat_H(m);
Hc=Calculate(Ha,Hb);
printf(\系数: 次数:\\n\
for(i=0;i<=max;i++){//输出相加后的结果
printf(\
if(i==max){
break;
}
Hc=Hc->next;
}
system(\
return 0; }
3. 设有n个人围坐在一个圆桌周围,现从第s个人开始报数,数到第m的人出列,然后从出列的下一个人重新开始报数,数到m的人又出列,如此重复,直到所有的人全部出列为止。Josephus问题是:对于任意给定的n,m,s,求出按出列次序得到的n个人员的顺序表。
分析:这题用单循环链表来做,数到m的结点就删除它,再用一个数组依次保存这些被删除的结点里的数据,一直到循环链表为空就行了。 源程序:
//1.3.c
#include
#include
struct Josephus{
int data;
struct Josephus* next; };
int main(){
struct Josephus* J;
struct Josephus* L;
struct Josephus* temp;
J=L;
int i,j;
int k=0;
int n,m,s;
int* p;
printf(\请输入n,m,s(中间用空格隔开:)\\n\
scanf(\
p=(int*)malloc(n*sizeof(int));
for(i=1;i<=n;i++){
L->data=i;
if(i==n){
L->next=J;
break;
}
L->next=(struct Josephus*)malloc(sizeof(struct Josephus));
L=L->next;
}//创建一个Josephus环
if(s==1){
for(i=1;i J=J->next; } } else{ while(J->data!=s-1){ J=J->next; } } while(k!=n){//依次找出数到m的人 for(i=1;i J=J->next; } p[k++]=J->next->data; temp=J->next; J->next=temp->next; free(temp); } for(i=0;i printf(\ } printf(\ free(p); system(\ return 0; } 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库数据结构实验实习题答案(2)在线全文阅读。
相关推荐: