1、 while(p!=NULL) if(p-a!=0) f=1; couta,b; if(p-pnext=NULL) cout if(f=0) cout /skip head if(p2!=NULL) p2=p2- while(p1!=NULL)&(p2!=NULL) if(p1-bp2-b) p3-pnext=(PDATE)malloc(sizeof(DATE); p3=p3-a=p2-a;b=p2-b;pnext=NULL; p2=p2- else if(p1-a=p1-b=p1- p1=p1- elsea+p2- /end while if(p1=NULL) p3-pnext=p2; if
2、(p2=NULL)pnext=p1;int main() int flag; int n; PDATE P6=NULL; PDATE p=NULL; for(int i=0;ia=0;b=0; cinflag; if(flag=1) for(int i=1;4; p=Pi; cinn; while(n-! p- p=p- cina output(Pi); add(P1,P2,P4); output(P4); add(P4,P3,P5); output(P5);0 约瑟夫问题(10分)0 约瑟夫问题成绩10分 折扣0.8 (本题要求用循环链表实现) 0 ,1, 2, 3题,只能选做三题.约瑟夫问
3、题是一个经典的问题。已知n个人(不妨分别以编号1,2,3,n 代表)围坐在一张圆桌周围,从编号为 k 的人开始,从1开始顺时针报数1, 2, 3, .,顺时针数到m 的那个人,出列并输出。然后从出列的下一个人开始,从1开始继续顺时针报数,数到m的那个人,出列并输出,依此重复下去,直到圆桌周围的人全部出列。n,k,m 按照出列的顺序依次输出出列人的编号,编号中间相隔一个空格,每10个编号为一行。非法输入的对应输出如下a) :n、k、m任一个小于1n,m,k must bigger than 0. b) knk should not bigger than n.例输入9,3,2输出4 6 8 1
4、3 7 2 9 5stdio.hmath.h struct date* next;PDATE setnew(PDATE p,int a) PDATE pt; pt=(PDATE) malloc (sizeof(DATE); pt-a=a;next=p-next; p-next=pt; return pt;int count;PDATE del(PDATE p0) if(!count) printf(n); count=10; printf(%d ,p0-a); PDATE p=p0- p0-a=p- free(p); count-; return p0; count=10; int n=0,k
5、=0,m=0; scanf(%d,%d,%d,&n,&m,&k);(n0&m0)n,m,k must bigger than 0.n else if(mn)k should not bigger than n.n else PDATE p=NULL; PDATE head=(DATE *)malloc(sizeof(DATE); head-next=head;a=1; p=head; for(int i=2;=n; p=setnew(p,i); while(p-=m) p=p- while(n) / int temp=k; int temp=k%n+n; while(-temp) del(p)
6、; n-;2. 综教楼后的那个坑描述在 LIT 综教楼后有一个深坑,关于这个坑的来历,有很多种不同的说法。其中一种说法是,在很多年以前,这个坑就已经在那里了。这种说法也被大多数人认可,这是因为该坑有一种特别的结构,想要人工建造是有相当困难的。从横截面图来看,坑底成阶梯状,由从左至右的 1.N 个的平面构成(其中 1 N 100,000),如图: : 8 7 6 5 4 timedate=NULL;pl=NULL;h=1000000;w=0; p=left; pt=left;%dn); long long* timedate=new long longn+1; for(long i=0; /ci
7、nwh; scanf(%d%dw,&h); p=setnew(p,w,h,timedate+i+1); if(pt-hh) pt=p; PDATE right=setnew(p,0,1000000,NULL); p=pt; myclock=0; while(p-pl-h!=p-pr- *(p-timedate)=myclock+p-w; /计算时间并删除合并 myclock+=(p-h-p-h)*p- p-w+=p-pr=p-pr;pl=p-pl; delete pt; else if(p-h else /右移 myclock+=p- *(p-timedate)=myclock; output
8、(timedate,n);3. 单词压缩存储(10分)如果采用单链表保存单词,可采用如下办法压缩存储空间。如果两个单词的后缀相同,则可以用同一个存储空间保存相同的后缀。例如,原来分别采用单链表保存的单词Str1“abcdef”和单词Str2“dbdef”,经过压缩后的存储形式如下。请设计一个高效的算法完成两个单链表的压缩存储,并估计你所设计算法的时间复杂度。要求:阅读预设代码,编写函数SNODE * ziplist( SNODE * head1, SNODE * head2 )ziplist的功能是:在两个串链表中,查找公共后缀,若有公共后缀,则压缩 并返回指向公共后缀的指针;否则返回NULL
9、预设代码前置代码view plaincopy to clipboardprint?1./*PRESETCODEBEGIN-NEVERTOUCHBELOW*/2.3.#include4.#include5.6.typedefstructsdata 7.chardata;8.sdata*next;9.SNODE;10.11.voidsetlink(SNODE*,*),outlink(12.intlistlen(13.SNODEziplist(14.SNODEfindlist(15.16.intmain() 17. 18.head1,head2,*head;19.str1100,str2100;20
10、.21.gets(str122.str223.24.head1=(SNODE*)malloc(sizeof(SNODE)25.head226.head27.head-nexthead1-head2-NULL;28.29.30.str2);31.32.33.34.35.36.return0;37. 38.39.void*head,*str40. 41.*p42.43.while(!044.p)sizeof(45.data*str;46.47.str+;48.p;49.50. 51.return;52. 53.54.void55. 56.NULL57. 58.printf(%c,-59.60.61.printf(62.63. 64.65.int66. 67.intlen=0;68.69.70.len+;71.72.73.len;74. 75.76.SNODE77. 78.m,79.*p1=head1,*p2=head2;80.81.m82.n83.84.85.p1p1-86.m-;87.88.89.p290.n-;91.92.93.while(94.95.96.97
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1