1程序解读及注释_第1页
1程序解读及注释_第2页
1程序解读及注释_第3页
1程序解读及注释_第4页
1程序解读及注释_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 PAGE 61 程序解读及注释/* 约瑟夫环的程序设计shiyan13.c */#include #include #define Null 0typedef struct tagnode 定义数据结构,并且简写为LinkList int num; struct tagnode *next; LinkList;LinkList *creat(int n);LinkList *select(LinkList *head,int m); 定义函数 输出结果为地址LinkList *head=Null,*last;int main() int n,m; printf(nInput the tota

2、l number of people:n); scanf(%d,&n); printf(ninput the number of person you are to call:n); scanf(%d,&m); head=creat(n); last=select(head,m); 函数调用 n=last-num; printf(the last one:%dn,n); free(last); printf(nPress any key to continue.n); getch(); return (1); /* main */LinkList *select(LinkList *head,

3、int m) 函数“叫名” LinkList *p,*q; int i,t,flag=0; p=head; t=1; 个人认为此处程序编写有纰漏,应是t=0,否则输入若喊道1的人出列的情况将会出现一下错误导致第一个人为Last q=p; q-前趋指针, p-当前指针 do do-while循环 p=q-next; t=t+1; if(t%m=0) 报数到 ,则立即跳出循环 printf(%4dt,p-num); if(q-next=q) flag=1;break; q-next=p-next; free(p); 并且释放变量 p=q; else q=p; while(q=p)|(flag=0)

4、; head=p; return (head);/* Select */LinkList *creat(int n) 使 n 个人围成一圈,并给每个人标识号数 LinkList *head,*s, *p; int i; s=(LinkList *)malloc(sizeof(LinkList); 申请结点 head=s; s-num=1; 先定义第一个 p=s; for(i=2;inum=i; p-next=s; p=s; p-next=head; return (head);/* creat */* 约瑟夫环的程序设计shiyan14.c */#include void Josephas(i

5、nt n,int m,int s); 函数声明int main() int n,m,s; printf(Johephas problemn); printf(input number of people, number to call,and start number:n); scanf(%d,%d,%d,&n,&m,&s); Josephus(n,m,s); 函数调用 getch(); /* main */Josephus(int n,int m,int s) int *R,i,j; R=(int *)malloc(n*sizeof(int); 申请结点空间 且大小为n个int for(i=

6、1;i=2;i-) s=(s+m-1) % i; if(s=0) s=i; 从start number开始,如果是n-1 printf(%d,Rs); 个人,则输出这个人 for(j=s+1;jexp=q-exp) /* coeficients */ x=p-coef-q-coef;if(x!=0) r=(TERM *)malloc(sizeof(TERM);r-exp=p-exp;r-coef=x;s-next=r;s=r;p=p-next;q=q-next;else if(p-expexp) r=(TERM *)malloc(sizeof(TERM);r-coef=q-coef;r-exp

7、=q-exp;s-next=r;s=r;q=q-next;else /* p-expq-exp */r=(TERM *)malloc(sizeof(TERM);r-exp=p-exp;r-coef=p-coef;s-next=r;s=r;p=p-next;while(p!=Null) r=(TERM *)malloc(sizeof(TERM);r-exp=p-exp;r-coef=p-coef;s-next=r;s=r;p=p-next;while(q!=Null) r=(TERM *)malloc(sizeof(TERM);r-exp=q-exp;r-coef=q-coef;s-next=r

8、;s=r;q=q-next;s-next=Null;r=hc;hc=hc-next;free(r);return (hc); /*polyjian */思考题2 修改数组结构定义typedef struct tagnode int num; char name; struct tagnode *next;修改creatLinkList *creat(int n) /* 使 n 个人围成一圈,并给每个人标识号数 */ LinkList *head,*s, *p; int i;char mydata; s=(LinkList *)malloc(sizeof(LinkList); head=s; s

9、-num=1; p=s; for(i=1;inum=i;printf(“enter name %d”,i);scanf(%c,&mydata);s-name=mydata; p-next=s; p=s; p-next=head; return (head);/* creat */3 本节课收获和感想。相比于约瑟夫环的程序设计的2组实验中,先选择单项循环链表作为存储结构模拟整个过程,并依次输出出列人的编号;再选择数组作为存储结构模拟整个过程,并依次输出出列人的编号;对同一问题,比较数据结构不同时,同一算法的不同实现及效率也不一样。从程序的编写来看,显然顺序结构比链式结构更加简单一些。因为数组的引入大大地减小了链式结构中由于数据录入时next和head递推时的各种循环所造成的麻烦。由此可见,对于同一到问题,可以先考虑顺序结构,这样更利于问题的快速解决。本节课在老师的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论