北京理工大学数据结构编程练习进步标准答案Word文档格式.docx

上传人:b****7 文档编号:22643756 上传时间:2023-02-05 格式:DOCX 页数:125 大小:106.41KB
下载 相关 举报
北京理工大学数据结构编程练习进步标准答案Word文档格式.docx_第1页
第1页 / 共125页
北京理工大学数据结构编程练习进步标准答案Word文档格式.docx_第2页
第2页 / 共125页
北京理工大学数据结构编程练习进步标准答案Word文档格式.docx_第3页
第3页 / 共125页
北京理工大学数据结构编程练习进步标准答案Word文档格式.docx_第4页
第4页 / 共125页
北京理工大学数据结构编程练习进步标准答案Word文档格式.docx_第5页
第5页 / 共125页
点击查看更多>>
下载资源
资源描述

北京理工大学数据结构编程练习进步标准答案Word文档格式.docx

《北京理工大学数据结构编程练习进步标准答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《北京理工大学数据结构编程练习进步标准答案Word文档格式.docx(125页珍藏版)》请在冰豆网上搜索。

北京理工大学数据结构编程练习进步标准答案Word文档格式.docx

while(p!

=NULL)

{

if(p->

a!

=0)

{

f=1;

cout<

<

"

p->

a<

"

b<

>

;

if(p->

pnext==NULL)

cout<

else

}

p=p->

}

if(f==0)

cout<

}

voidadd(PDATEa,PDATEb,PDATEc)

PDATEp1,p2,p3;

p1=a;

p2=b;

p3=c;

if(p1!

=NULL)p1=p1->

//skiphead

if(p2!

=NULL)p2=p2->

while((p1!

=NULL)&

&

(p2!

=NULL))

if(p1->

b>

p2->

b)

p3->

pnext=(PDATE)malloc(sizeof(DATE));

p3=p3->

a=p2->

a;

b=p2->

b;

pnext=NULL;

p2=p2->

elseif(p1->

a=p1->

b=p1->

p1=p1->

else

a+p2->

}//endwhile

if(p1==NULL)

p3->

pnext=p2;

if(p2==NULL)

pnext=p1;

intmain()

intflag;

intn;

PDATEP[6]={NULL};

PDATEp=NULL;

for(inti=0;

i<

6;

i++)

P[i]=(PDATE)malloc(sizeof(DATE));

P[i]->

a=0;

b=0;

cin>

flag;

if(flag==1)

for(inti=1;

4;

p=P[i];

cin>

n;

while(n--!

{

p->

p=p->

cin>

a>

}

output(P[i]);

add(P[1],P[2],P[4]);

output(P[4]);

add(P[4],P[3],P[5]);

output(P[5]);

 

0约瑟夫问题(10分)

0约瑟夫问题 

成绩10分 

折扣0.8 

(本题要求用循环链表实现)

0,1,2,3题,只能选做三题.

约瑟夫问题是一个经典的问题。

已知n个人(不妨分别以编号1,2,3,…,n代表)围坐在一张圆桌周围,从编号为k的人开始,从1开始顺时针报数1,2,3,...,顺时针数到m的那个人,出列并输出。

然后从出列的下一个人开始,从1开始继续顺时针报数,数到m的那个人,出列并输出,…依此重复下去,直到圆桌周围的人全部出列。

n,k,m

按照出列的顺序依次输出出列人的编号,编号中间相隔一个空格,每10个编号为一行。

非法输入的对应输出如下

a)

n、k、m任一个小于1

n,m,kmustbiggerthan0.

b)

k>

n

kshouldnotbiggerthann.

输入

9,3,2

输出

468137295

stdio.h>

math.h>

structdate*next;

PDATEsetnew(PDATEp,inta)

PDATEpt;

pt=(PDATE)malloc(sizeof(DATE));

pt->

a=a;

next=p->

next;

p->

next=pt;

returnpt;

intcount;

PDATEdel(PDATEp0)

if(!

count)

printf("

\n"

);

count=10;

printf("

%d"

p0->

a);

PDATEp=p0->

p0->

a=p->

free(p);

count--;

returnp0;

count=10;

intn=0,k=0,m=0;

scanf("

%d,%d,%d"

&

n,&

m,&

k);

(n>

0&

m>

0))

n,m,kmustbiggerthan0.\n"

elseif(m>

n)

kshouldnotbiggerthann.\n"

else

PDATEp=NULL;

PDATEhead=(DATE*)malloc(sizeof(DATE));

head->

next=head;

a=1;

p=head;

for(inti=2;

=n;

p=setnew(p,i);

while(p->

=m)

p=p->

while(n)

//inttemp=k;

inttemp=k%n+n;

while(--temp)

del(p);

n--;

2.综教楼后的那个坑

描述

  在LIT综教楼后有一个深坑,关于这个坑的来历,有很多种不同的说法。

其中一种说法是,在很多年以前,这个坑就已经在那里了。

这种说法也被大多数人认可,这是因为该坑有一种特别的结构,想要人工建造是有相当困难的。

  从横截面图来看,坑底成阶梯状,由从左至右的1..N个的平面构成(其中1≤N≤100,000),如图:

   *            *:

   *            *8

   *    **      *7

   *    **      *6

   *    **      *5

   *    *********4<

-高度

   *    *********3

   **************2

   **************1

平面 | 1 |2|   3   |

每个平面i可以用两个数字来描述,即它的宽度Wi和高度Hi,其中1≤Wi≤1,000、1≤Hi≤1,000,000,而这个坑最特别的地方在于坑底每个平面的高度都是不同的。

每到夏天,雨水会把坑填满,而在其它的季节,则需要通过人工灌水的方式把坑填满。

灌水点设在坑底位置最低的那个平面,每分钟灌水量为一个单位(即高度和宽度均为1)。

随着水位的增长,水自然会向其它平面扩散,当水将某平面覆盖且水高达到一个单位时,就认为该平面被水覆盖了。

  请你计算每个平面被水覆盖的时间。

  灌水 

水满后自动扩散

 

*| 

*

*V 

.... 

*~~~~~~~~~~~~*

** 

*~~~~**:

*~~~~**~~~~~~*

*~~~~**~~~~~~* 

********* 

*~~~~********* 

*~~~~*********

************** 

**************

   4分钟后 

   26分钟后       50分钟后

   平面1被水覆盖    平面3被水覆盖    平面2被水覆盖输入

  输入的第一行是一个整数N,表示平面的数量。

从第二行开始的N行上分别有两个整数,分别表示平面的宽度和高度。

  输出每个平面被水覆盖的时间。

longlong*timedate;

longh;

intw;

structdate*pl;

structdate*pr;

PDATEsetnew(PDATEp0,intw,longh,longlong*num)//p0为左邻

PDATEp=(PDATE)malloc(sizeof(DATE));

timedate=num;

pl=p0;

pr=NULL;

pr=p;

h=h;

w=w;

returnp;

voidoutput(longlong*p,longn)

while(n--)

%lld\n"

*(++p));

longlongmyclock;

longn;

PDATEp=NULL,pt=NULL;

//setleftp

PDATEleft=(PDATE)malloc(sizeof(DATE));

left->

timedate=NULL;

pl=NULL;

h=1000000;

w=0;

p=left;

pt=left;

%d"

n);

longlong*timedate=newlonglong[n+1];

for(longi=0;

//cin>

w>

h;

scanf("

%d%d"

w,&

h);

p=setnew(p,w,h,timedate+i+1);

if(pt->

h>

h)

pt=p;

PDATEright=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;

deletept;

elseif(p->

h<

//移至下一进水点

h&

continue;

h)//左移

while(p->

else//右移

myclock+=p->

*(p->

timedate)=myclock;

output(timedate,n);

3.单词压缩存储(10分)

如果采用单链表保存单词,可采用如下办法压缩存储空间。

如果两个单词的后缀相同,则可以用同一个存储空间保存相同的后缀。

例如,原来分别采用单链表保存的单词Str1“abcdef”和单词Str2“dbdef”,经过压缩后的存储形式如下。

请设计一个高效的算法完成两个单链表的压缩存储,并估计你所设计算法的时间复杂度。

要求:

阅读预设代码,编写函数SNODE*ziplist(SNODE*head1,SNODE*head2)

ziplist的功能是:

在两个串链表中,查找公共后缀,若有公共后缀,则压缩并返回指向公共后缀的指针;

否则返回NULL

预设代码

前置代码

viewplaincopytoclipboardprint?

1./* 

PRESET 

CODE 

BEGIN 

NEVER 

TOUCH 

BELOW 

*/ 

2. 

3.#include 

4.#include 

5. 

6.typedef 

struct 

sdata 

7.{ 

char 

data;

8. 

sdata 

*next;

9.} 

SNODE;

10. 

11.void 

setlink( 

SNODE 

*, 

), 

outlink( 

12.int 

listlen( 

13.SNODE 

ziplist( 

14.SNODE 

findlist( 

15. 

16.int 

main( 

) 

17.{ 

18. 

head1, 

head2, 

*head;

19. 

str1[100], 

str2[100];

20. 

21. 

gets( 

str1 

22. 

str2 

23. 

24. 

head1 

(SNODE 

*) 

malloc( 

sizeof(SNODE) 

25. 

head2 

26. 

head 

27. 

head->

next 

head1->

head2->

NULL;

28. 

29. 

30. 

str2);

31. 

32. 

33. 

34. 

35. 

36. 

return 

0;

37.} 

38. 

39.void 

*head, 

*str 

40.{ 

41. 

*p 

42. 

43. 

while 

( 

!

'

\0'

44. 

) 

sizeof( 

45. 

data 

*str;

46. 

47. 

str++;

48. 

p;

49. 

50. 

51. 

return;

52.} 

53. 

54.void 

55.{ 

56. 

NULL 

57. 

58. 

printf( 

%c"

 

->

59. 

60. 

61. 

printf("

62. 

63.} 

64. 

65.int 

66.{ 

67. 

int 

len=0;

68. 

69. 

70. 

len 

++;

71. 

72. 

73. 

len;

74.} 

75. 

76.SNODE 

77.{ 

78. 

m, 

79. 

*p1=head1, 

*p2=head2;

80. 

81. 

82. 

83. 

84. 

85. 

p1 

p1->

86. 

m--;

87. 

88. 

89. 

p2 

90. 

n--;

91. 

92. 

93. 

while( 

94. 

95. 

96. 

97

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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