数据结构计算机科学与技术.docx

上传人:b****6 文档编号:3105209 上传时间:2022-11-17 格式:DOCX 页数:10 大小:19.50KB
下载 相关 举报
数据结构计算机科学与技术.docx_第1页
第1页 / 共10页
数据结构计算机科学与技术.docx_第2页
第2页 / 共10页
数据结构计算机科学与技术.docx_第3页
第3页 / 共10页
数据结构计算机科学与技术.docx_第4页
第4页 / 共10页
数据结构计算机科学与技术.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

数据结构计算机科学与技术.docx

《数据结构计算机科学与技术.docx》由会员分享,可在线阅读,更多相关《数据结构计算机科学与技术.docx(10页珍藏版)》请在冰豆网上搜索。

数据结构计算机科学与技术.docx

数据结构计算机科学与技术

《数据结构》(计算机科学与技术本科)

第一部分客观题

一、单项选择(每题2分,共20分)

1、设n为正整数。

则下面程序段的时间复杂度为。

k=0;

for(i=1;i<=n;i++)

for(j=i;j<=n;j++)k++;

A.O

(1)B.O(n)C.O(nlogn)D.O(n2)

2、若在线性表的任何位置上插入元素的概率是相等的,那么在长度为n的顺序

表中插入一个元素时需平均移动个元素。

A.nB.(n-1)/2C.n/2D.(n+1)/2

3、栈的入栈序列是1,2,…,n,输出序列为p1,p2,…pn,若p仁n,则pi为。

A.iB.n-iC.n-i+1D.不确定

4、已知串s="ABCDEFGH',则s的所有不同子串的个数为。

A.8B.9C.36D.37

5、下列关于二叉树的说法中,正确的是。

A.二叉树的度为2B.二叉树的度可以小于2

C.二叉树中至少有一个结点的度为2D.二叉树中任一个结点的度都为2

6、图的深度优先遍历算法类似于二叉树的。

A.先序遍历B.中序遍历C.后序遍历D.层序遍历

7、用链地址法处理冲突构造的散列表中,每个地址单元所链接的同义词表中结

点的相同。

A.关键字B.元素值C.散列地址D.含义

8、有序表(1,32,41,45,62,75,77,82,95,100),使用折半查找关键字为95的元素时,需要经过次比较后才能查找成功。

A.2B.3C.4D.5

9、下列方法中,是稳定的排序方法。

A•堆排序B.希尔排序C.快速排序D.直接插入排序

10、对n个记录的序列进行堆排序,最坏情况下的时间复杂度为。

A.O(logn)B.O(nlogn)C.O(n)D.O(n2)

二、是非题:

(每题1分,共10分)(说明:

正确的选“A”,错误选B了

11、在数据结构中,从逻辑上可以把数据结构分为动态结构和静态结构两大类。

(B)

12、在不带头结点的非空单链表中,首元结点的存储位置由头指针指示。

(B)

13、队列是限定在队尾插入元素,在队头删除元素的线性表。

(A)

14、空串和空格串是相同的。

(A)

15、在哈夫曼树中,通常权值较大的结点离根较远。

(B)

16、若从无向图的一个顶点出发进行广度优先遍历可访问到图中所有顶点,则该图一定是连通图。

(A)

17、有n个顶点和n-1条边的无向图一定是生成树。

(B)

18、折半查找时,要求线性表必须是有序的且以顺序结构存储。

(A)

19、快速排序的速度在所有排序方法中是最快的,而且所需的附加空间也最少。

(B)

20、对一个堆按层次遍历,不一定能得到一个有序序列。

(A)

第二部分主观题一、简答题(每题10分,共50分)

1、在快速排序过程中,通常取序列中的第1个记录作为枢轴,以它为“分界线”重排其余记录。

但当初始记录序列按关键字有序或基本有序时,快速排序将蜕化为起泡排序,为改进之,应如何选取枢轴记录?

答有序或者基本有序时,每次划分只能完成1个(左右),时间复杂度为0(nT)

如果要改进,选择枢轴可以使用方法:

方法1、三者取中:

序列第一个、中间位置、最后位置三个值的中间值

方法2、随机选取:

不再是第一个记录,而是在序列中随机选取

2、证明:

任何一棵满二叉树中的分支数B满足B=2(nO-1),其中n0为叶子结点个数。

证明:

设nO为叶子结点个数,证明:

设,n2为叶子结点个数,则由二叉树的性质2可知:

n2=nO-1又:

满二叉树中只有度为2的结点和叶子结点,所以满二叉树中的结点总数n=n2+n0=2nO-1又:

二叉树中的分支数B=n-1所以:

B=2n0-1-1=2(nO-1)

01O

1O1

3、一个图的邻接矩阵G.arcs=「°11-,则该图有多少个顶点?

如果是有向

图,该图共有多少条弧?

如果是无向图,该图共有多少条边?

图有3个顶点,如果是有向图,则有4条弧,如果是无向图,则有2条边

4、设散列函数H(key)=keyMOD7,用线性探测再散列法解决冲突。

对关键字序列{13,28,72,5,16,8,7,11}在地址空间为0-10的散列区中建散列表,画出此表,并求等概率情况下查找成功时的平均查找长度。

下标CI2345d

7$

jF

|关密字|二3|72|Ifp5B

11

匕般7懸1112511

4

ASL=(1+1+1+2+5+1+1+4)/8=2

5、设关键字集合为{10,2,14,8,12,13},

(1)写出用希尔排序方法对序列排序时每一趟结束时的关键字状态。

⑵用堆排序方法对其从小到大排序,画出堆排序的初态、建堆和排序过程中重建堆的过程。

(1)希尔排序:

d1=3:

{8213101214}

d2=2:

{8212101314}

d3=1:

{2810121314}

堆排序初态:

{10,2,14,8,12,13}

建堆:

{1412138210}

输出14之后再建堆:

{1312108214}

输出13之后再建堆:

{1281021314}

输出12之后再建堆:

{1082121314}

输出10之后再建堆:

{8210121314}

输出8之后再建堆:

{2810121314}有序

二、算法题(每题10分,共20分)

1、设带头结点的单链表(L为头指针)中的数据元素递增有序。

设计算法,将x

插入到链表的适当位置上,并仍保持该表的有序性。

voidInsert(ListNode*head,intx)

{〃设为有头结点,成员和类型名请按自己的实际情况修改

ListNode*p,*q;

p=head->next;

q=head;

while(p!

=NULL&&p->data

{

q=p;

p=p_>next;

}

p=(ListNode*)malloc(sizeof(ListNode));

p->data=x;

p_>next=q_>next;

q_>next=p;

2、假设将循环队列定义为:

以整型域变量front和length分别指示循环队列中

队头元素位置和队列中元素个数,指针elem指示存放队列元素的连续空间的首

地址,写出相应的入队列和出队列的算法

1.typedefcharQElemType;

2.typedefstruct{

3.QElemTypeelem[MAXQSIZE];

4.intlength;

5.intrear;

6.}CLenQueue;

7.StatusEnCQueue(CLenQueue&Q,QElemTypex)

8.{

9.if(Q.length==MAXQSIZE){

10.returnERROR;//循环队列满

11.}

12.if(MAXQSIZE-1!

=Q.rear){

13.++Q.rear;

14.Q.elem[Q.rear]=x;

15.}

16.else{//rear指向循环队列的末尾时,作特殊处理使其构成循环

17.Q.rear=0;

18.Q.elem[Q.rear]=x;

19.}

20.++Q.length;〃当前元素个数+1

21.returnOK;

22.}

23.

23.StatusDeCQueue(CLenQueue&Q,QElemType&x)

24.{

25.if(!

Q.length){

26.returnERROR;//循环队列空

27.}

28.if(Q.rear+1>=Q.length){〃当rear的下标大于对头指向的下标时

29.x=Q.elem[Q.rear+1-Q.length];

30.}

31.else{〃当rear的下标小于队头下标时

32.x=Q.elem[MAXQSIZE+Q.rear+1-Q.length];

34.

35.

36.

37.

38.

39.

40.

41.

42.

43.

44.

45.

46.

47.

48.

49.

50.

51.

52.

53.

54.

55.

56.

57.

}

--Q.length;//当前元素个数-1

returnOK;

}

#include

#include

#defineQUEUE_SIZE10

/*循环队列结构体*/

typedefstruct{

intfront;/*队列头*/

intrear;/*队列尾*/

intlength;/*记录队列元素个数*/

intdata[QUEUE_SIZE];/*存放队列元素值的数组*/

}CirQueue;

/*初始化队列*/

voidinitQueue(CirQueue*Q)

{

Q->front=Q->rear=0;

Q->length=0;

}

/*判断队列是否为空*/

intQueueEmpty(CirQueue*Q)

{

returnQ->length==0;

58.

59.

60.

61.

62.

63.

64.

65.

66.

67.

68.

69.

70.

71.

72.

73.

74.

75.

76.

77.

78.

79.

/*判断队列满*/

intQueueFull(CirQueue*Q)

{

returnQ->length==QUEUE_SIZE;

}

/*入队列*/

voidEnQueue(CirQueue*Q,intdata)

{

if(QueueFull(Q))

printf("队列已经满了.\n");

Q->length++;/*队列元素个数加1*/

Q->data[Q->rear]=data;/*将新元素插入队尾*/

Q->rear=(Q->rear+1)%QUEUE_SIZE;/*将队尾加1*/

}

/*岀队列*/

intDequeue(CirQueue*Q)

{

inttemp;

if(QueueEmpty(Q))

printf("队列已经为空!

\n");

temp=Q->data[Q->front];

80.

81.

82.

83.

84.

85.

86.

87.

88.

89.

90.

91.

92.

93.

94.

95.

96.

97.

98.

99.

100.

101.

Q->length--;/*队列元素个数减1*/

Q->front=(Q->front+1)%QUEUE_SIZE;/*队列头加1*/

returntemp;

}

/*测试程

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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