数据结构练习题19页word资料.docx

上传人:b****5 文档编号:7557014 上传时间:2023-01-25 格式:DOCX 页数:18 大小:55.83KB
下载 相关 举报
数据结构练习题19页word资料.docx_第1页
第1页 / 共18页
数据结构练习题19页word资料.docx_第2页
第2页 / 共18页
数据结构练习题19页word资料.docx_第3页
第3页 / 共18页
数据结构练习题19页word资料.docx_第4页
第4页 / 共18页
数据结构练习题19页word资料.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数据结构练习题19页word资料.docx

《数据结构练习题19页word资料.docx》由会员分享,可在线阅读,更多相关《数据结构练习题19页word资料.docx(18页珍藏版)》请在冰豆网上搜索。

数据结构练习题19页word资料.docx

数据结构练习题19页word资料

数据结构练习题:

1.下面关于线性表的叙述错误的是(D)。

(A)线性表采用顺序存储必须占用一片连续的存储空间

(B)线性表采用链式存储不必占用一片连续的存储空间

(C)线性表采用链式存储便于插入和删除操作的实现

(D)线性表采用顺序存储便于插入和删除操作的实现

2.设哈夫曼树中的叶子结点总数为m,若用二叉链表作为存储结构,则该哈夫曼树中总共有(B)个空指针域。

(A)2m-1(B)2m(C)2m+1(D)4m

3.设顺序循环队列Q[0:

M-1]的头指针和尾指针分别为F和R,头指针F总是指向队头元素的前一位置,尾指针R总是指向队尾元素的当前位置,则该循环队列中的元素个数为(C)。

(A)R-F(B)F-R(C)(R-F+M)%M(D)(F-R+M)%M

4.设某棵二叉树的中序遍历序列为ABCD,前序遍历序列为CABD,则后序遍历该二叉树得到序列为(A)。

(A)BADC(B)BCDA(C)CDAB(D)CBDA

5.设某完全无向图中有n个顶点,则该完全无向图中有(A)条边。

(A)n(n-1)/2(B)n(n-1)(C)n2(D)n2-1

6.设某棵二叉树中有2000个结点,则该二叉树的最小高度为(C)。

(A)9(B)10(C)11(D)12

7.在数据结构中,从逻辑上可以把数据结构分为(D)

A.动态结构和静态结构B.紧凑结构和非紧凑结构

C.内部结构和外部结构D.线性结构和非线性结构

8.已知图的邻接表如下所示,根据算法,则从顶点V0出发按广度优先遍历的结点序列是(A)

A.0321B.0123C.0132D.0312

9.若进栈序列为a,b,c,d,e,则栈的不可能的输出序列是(B)

A.edcbaB.dceabC.decbaD.abcde

10.把一棵树转换为二叉树后,这棵二叉树的形态是(A)。

A.唯一的       B.有多种

C.有多种,但根结点都没有左孩子D.有多种,但根结点都没有右孩子

11.为查找某一特定单词在文本中出现的位置,可应用的串运算是( D )

 A.插入       B.删除       C.串联接       D.子串定位

12.ALV树是一种平衡的二叉树,树中任一结点的( B )

 A.左、右子树的高度均相同         B.左、右子树高度差的绝对值不超过1

 C.左子树的高度均大于右子树的高度 D.左子树的高度均小于右子树的高度

13.对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为( C )

  A.顺序表       B.用头指针表示的单循环链表

  C.用尾指针表示的单循环链表       D.单链表

14.二叉树是非线性数据结构,所以(C)。

A.它不能用顺序存储结构存储;B.它不能用链式存储结构存储;

C.顺序存储结构和链式存储结构都能存储;D.顺序存储结构和链式存储结构都不能使用

15.用邻接表表示图进行广度优先遍历时,通常是采用(B)来实现算法的。

A.栈B.队列C.树D.图

16.数据的最小单位是(A)。

(A)数据项(B)数据类型(C)数据元素(D)数据变量

17.设某棵二叉树中有2000个结点,则该二叉树的最小高度为(C)。

(A)9(B)10(C)11(D)12

18.函数substr(“DATASTRUCTURE”,5,9)的返回值为(A)。

(A)“STRUCTURE”(B)“DATA”

(C)“ASTRUCTUR”(D)“DATASTRUCTURE”

19.设某完全无向图中有n个顶点,则该完全无向图中有(A)条边。

(A)n(n-1)/2(B)n(n-1)(C)n2(D)n2-1

20.深度为k的完全二叉树中最少有(B)个结点。

(A)2k-1-1(B)2k-1(C)2k-1+1(D)2k-1

21.设连通图G中的边集E={(a,b),(a,e),(a,c),(b,e),(e,d),(d,f),(f,c)},则从顶点a出发可以得到一种深度优先遍历的顶点序列为(B)。

(A)abedfc(B)acfebd(C)aebdfc(D)aedfcb

22.设输入序列是1、2、3、……、n,经过栈的作用后输出序列的第一个元素是n,则输出序列中第i个输出元素是(C)。

(A)n-i(B)n-1-i(C)n+1-i(D)不能确定

23.为查找某一特定单词在文本中出现的位置,可应用的串运算是( D )

 A.插入       B.删除       C.串联接       D.子串定位

24.设有序表中有1000个元素,则用二分查找查找元素X最多需要比较(B)次。

(A)25(B)10(C)7(D)1

25.对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为( C )

  A.顺序表       B.用头指针表示的单循环链表

  C.用尾指针表示的单循环链表       D.单链表

26.把一棵树转换为二叉树后,这棵二叉树的形态是(A)。

A.唯一的       B.有多种

C.有多种,但根结点都没有左孩子D.有多种,但根结点都没有右孩子

27.已知图的邻接表如下所示,根据算法,则从顶点V0出发按广度优先遍历的结点序列是(A)

A.0321B.0123C.0132D.0312

28.二叉树是非线性数据结构,所以(C)。

A.它不能用顺序存储结构存储;B.它不能用链式存储结构存储;

C.顺序存储结构和链式存储结构都能存储;D.顺序存储结构和链式存储结构都不能使用

29.数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素的公式为(D)。

A.r-f;B.(n+f-r)%n;C.n+r-f;D.(n+r-f)%n

30.用邻接表表示图进行广度优先遍历时,通常是采用(B)来实现算法的。

A.栈B.队列C.树D.图

31.1.for(i=1,t=1,s=0;i<=n;i++){t=t*i;s=s+t;}的时间复杂度为O(n)。

32.下面程序段的功能是实现冒泡排序算法,请在下划线处填上正确的语句。

voidbubble(intr[n])

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

for(exchange=0,j=0;j

if(r[j]>r[j+1]){temp=r[j+1];r[j+1]=r[j];r[j]=temp;exchange=1;}

if(exchange==0)return;

33.中序遍历二叉排序树所得到的序列是有序序列(填有序或无序)。

34.快速排序的最坏时间复杂度为O(n2),平均时间复杂度为O(nlog2n)。

35.设某棵二叉树中度数为0的结点数为N0,度数为1的结点数为N1,则该二叉树中度数为2的结点数为N0-1;若采用二叉链表作为该二叉树的存储结构,则该二叉树中共有2N0+N1个空指针域。

1.36.设某无向图中顶点数和边数分别为n和e,所有顶点的度数之和为d,则e=d/2。

37.设一组初始记录关键字序列为(55,63,44,38,75,80,31,56),则利用筛选法建立

2.的初始堆为(31,38,54,56,75,80,55,63)。

3.38.设F和R分别表示顺序循环队列的头指针和尾指针,则判断该循环队列为空的条件为F==R。

39.下面程序段的功能是实现二分查找算法,请在下划线处填上正确的语句。

structrecord{intkey;intothers;};

intbisearch(structrecordr[],intk)

intlow=0,mid,high=n-1;

while(low<=high)

mid=(low+high)/2;

if(r[mid].key==k)return(mid+1);

elseif(r[mid].key>k)high=mid-1;elselow=mid+1;

return(0);

40.若顺序表每个元素长度均为5,其中第一个元素的存储地址为30,则第6个元素的存储地址为55。

41.栈的插入和删除只能在栈的栈顶进行,后进栈的元素必定先出栈,所以又把栈称为先进后出表;队列的插入和删除运算分别在队列的两端进行,先进队列的元素必定先出队列,所以又把队列称为先进先出表。

42.顺序表中逻辑上相邻的元素的物理位置必定紧邻。

单链表中逻辑上相邻的元素的物理位置不一定紧邻。

(对)

43.设一棵完全二叉树有128个结点,则该完全二叉树的深度为8,有64个叶子结点。

(对)

44.满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。

(对)

45.设一棵二叉树的先序序列和后序序列,则能够唯一确定出该二叉树的形状。

(错)

46.栈和链表是两种不同的数据结构。

(错)

47.具有12个结点的完全二叉树有5个度为2的结点。

(对)

48.关键路径是事件结点网络中的从源点到汇点的最短路径。

(错)

49.由树转化成二叉树,该二叉树的右子树不一定为空。

(错)

50.堆排序是不稳定的排序方法。

(对)

51.调用一次深度优先遍历可以访问到图中的所有顶点。

(错)

52.分块查找的平均查找长度不仅与索引表的长度有关,而且与块的长度有关。

(对)

53.冒泡排序在初始关键字序列为逆序的情况下执行的交换次数最多。

(对)

54.已知一棵二叉树的先序序列是ABCDEFGHIJK,中序序列是CDBGFEAHJIK,请构造出该二叉树

55.设给定权集W={5,7,2,3,6,8,9},请构造画出关于W的一棵赫夫曼树,并求出其加权路径长度WPL。

加权路径长度:

WPL=2*4+3*4+5*3+6*3+7*3+8*2+9*2=108

56.对如下所示的带权图:

(1)分别按照克鲁斯卡尔算法和普里姆算法,从顶点v1出发,生成最小生成树,按生成次序依次写出各条边;

(2)画出该图最小生成树,并求出它的权值之和。

57、下图所示的森林:

(1)求树(a)的先根序列和后根序列;

(2)求森林先序序列和中序序列;

(3)将此森林转换为相应的二叉树;

(1)先根序列:

ABCDEF;后根序列:

BDEFCA;

(2)先序序列:

ABCDEFGHIJK;中序序列:

BDEFCAIJKHG

(3)森林转换为相应的二叉树;

58.设一组初始记录关键字序列为(15,17,18,22,35,51,60),要求计算出使用折半查找查找成功时的平均查找长度。

59.编写递归算法,计算二叉树中叶子结点的数目。

intLeafCount_BiTree(BitreeT)//求二叉树中叶子结点的数目

if(!

T)return0;//空树没有叶子

elseif(!

T->lchild&&!

T->rchild)return1;//叶子结点

elsereturnLeaf_Count(T->lchild)+Leaf_Count(T->rchild);//左子树的叶子数加

上右子树的叶子数

}//LeafCount_BiTree

61.假设正读和反读都相同的字符序列为“回文”,例如,‘abba’和‘abcba’是回文,‘abcde’和‘ababab’则不是回文。

试写一个算法判别读入的一个以‘@’为结束符的字符序列是否是“回文”。

intPalindrome_Test()//判别输入的字符串是否回文序列,是则返回1,否则返回0

{

  InitStack(S);InitQueue(Q);

  while((c=getchar())!

='@')

  {

    Push(S,c);EnQueue(Q,c);//同时使用栈和队列两种结构

  }

  while(!

StackEmpty(S))

  {

    Pop(S,a);DeQueue(Q,b));

    if(a!

=b)returnERROR;

  }

  returnOK;

}//Palindrome_Test

62.设计两个有序单链表的合并排序算法。

voidmergelklist(lklist*ha,lklist*hb,lklist*&hc)

lklist*s=hc=0;

while(ha!

=0&&hb!

=0)

if(ha->datadata){if(s==0)hc=s=ha;else{s->next=ha;s=ha;};ha=ha->next;}

else{if(s==0)hc=s=hb;else{s->next=hb;s=hb;};hb=hb->next;}

if(ha==0)s->next=hb;elses->next=ha;

63.设一组初始记录关键字序列为(45,80,48,40,22,78),则分别给出第4趟简单选择排序和第4趟直接插入排序后的结果。

(22,40,45,48,80,78),(40,45,48,80,22,78)

64.已知一棵二叉树的先序序列是ABCDEFGHIJK,中序序列是CDBGFEAHJIK,请构造出该二叉树

65.设一组有序的记录关键字序列为(13,18,24,35,47,50,62,83,90),查找方法用二分查找(折半查找),要求计算出查找关键字62时的比较次数并计算出查找成功时的平均查找长度。

2,ASL=91*1+2*2+3*4+4*2)=25/9

66、已知散列函数为H(key)=keymod7,散列表长度为7(散列地址空间为0.....6),待散列序列关键字依次为:

(25,48,32,50,68)。

要求

(1)根据以上条件构造一散列表,并用“线性探测再散列法”解决有关地址冲突(要求写出构造过程);

(2)若要用该散列表查找元素68,试给出所需的比较次数和依次被比较的关键字。

(1)散列表如图所示:

0123456

68

50

25

32

48

{H(25)=25mod7=4;没有地址冲突,故填入表中4号位置;

H(48)=48mod7=6;没有地址冲突,故填入表中6号位置;

H(32)=32mod7=4;出现地址冲突,使用线性探测:

H(32)=(4+1)mod7=5;

没有地址冲突,故填入表中5号位置;

H(50)=50mod7=1;没有地址冲突,故填入表中1号位置;

H(68)=68mod7=5;出现地址冲突,使用线性探测:

H(68)=(5+1)mod7=6;仍有地址冲突,故再次线性探测H(68)=(5+2)mod7=0;此时已没有地址冲突,故填入表中0号位置;

散列表全部构造完成!

}//以上为注释,供参考使用!

//

(2)共需要比较3次;依次分别和:

32,48,68进行比较。

68.已知一棵二叉树的中序序列:

CBEDAHGIJF,后序序列为:

CEDBHJIGFA,请画出该二叉树并写出其先序序列。

69.已知散列函数为H(key)=keymod7,散列表长度为7(散列地址空间为0.....6),待散列序列关键字为:

(32,55,39,57,75)。

要求:

(1)根据以上条件构造一散列表,并用“线性探测再散列法”解决有关地址冲突(要求写出构造过程);

(2)若要用该散列表查找元素75,试给出所需的比较次数和依次被比较的关键字。

①散列表如图所示:

32,55,39,57,75

0123456

75

57

39

32

55

{H(32)=32mod7=4;没有地址冲突,故填入表中4号位置;

H(55)=55mod7=6;没有地址冲突,故填入表中6号位置;

H(39)=39mod7=4;出现地址冲突,使用线性探测:

H(39)=(4+1)mod7=5;

没有地址冲突,故填入表中5号位置;

H(57)=57mod7=1;没有地址冲突,故填入表中1号位置;

H(75)=75mod7=5;出现地址冲突,使用线性探测:

H(75)=(5+1)mod7=6;仍有地址冲突,故再次线性探测H(75)=(5+2)mod7=0;此时已没有地址冲突,故填入表中0号位置;

散列表全部构造完成!

}//以上为注释,供参考使用!

//

②共需要比较3次。

依次分别和:

32,55,75进行比较。

70.希尔排序、简单选择排序、快速排序和堆排序是不稳定的排序方法,试举例说明。

【解答】

(1)希尔排序{512275275*061}增量为2

{275*061512275}增量为1

{061275*275512}

(2)直接选择排序{275275*512061}i=1

{061275*512275}i=2

{061275*512275}i=3

{061275*275512}

(3)快速排序{512275275*}

{275*275512}

(4)堆排序{275275*061170}已经是最大堆,交换275与170

{170275*061275}对前3个调整

{275*170061275}前3个最大堆,交换275*与061

{061170275*275}对前2个调整

{170061275*275}前2个最大堆,交换170与061

{061170275*275}

71.设给定一个权值集合W=(3,5,7,9,11),要求根据给定的权值集合构造一棵哈夫曼树并计算哈夫曼树的带权路径长度WPL。

73.设一组有序的记录关键字序列为(13,18,24,35,47,50,62,83,90),查找方法用二分查找(折半查找),要求计算出查找关键字62时的比较次数并计算出查找成功时的平均查找长度。

2,ASL=91*1+2*2+3*4+4*2)=25/9

74.已知二叉树的前序遍历序列是AEFBGCDHIKJ,中序遍历序列是EFAGBCHKIJD,画出此二叉树,并画出它的后序和中序线索二叉树。

后序线索二叉树如下图:

中序线索自己画

75.请画出下图的邻接矩阵和邻接表。

(1)邻接矩阵:

       

(2)邻接表:

78.设一组初始记录关键字序列为(15,17,18,22,35,51,60),要求计算出使用折半查找查找成功时的平均查找长度

ASL=(1*1+2*2+3*4)/7=17/7

79.已知一棵二叉树的中序序列:

CBEDAHGIJF,后序序列为:

CEDBHJIGFA,请画出该二叉树并写出其先序序列。

先序序列为:

ABCDEFGHIJ

80.设一组初始记录关键字序列为(45,80,48,40,22,78),则分别给出第4趟简单选择排序和第4趟直接插入排序后的结果。

(22,40,45,48,80,78),(40,45,48,80,22,78)

81、编写算法实现将单链表就地逆置,即不另外开辟结点空间,而将链表元素翻转顺序。

思路:

从链上依次取下结点,按照逆序建表的方法重新建表。

voidReverse(LinkList&L)

p=L->next;//原链表

L->next=NULL;//新表(空表)

while(p){

//从原链表中取下结点s

s=p;

p=p->next;

//插入L新表表头

s->next=L->next;

L->next=s;

82、设计在链式结构上实现简单选择排序算法。

lklist*p,*q,*s;intmin,t;

if(head==0||head->next==0)return;

for(q=head;q!

=0;q=q->next)

min=q->data;s=q;

for(p=q->next;p!

=0;p=p->next)if(min>p->data){min=p->data;s=p;}

if(s!

=q){t=s->data;s->data=q->data;q->data=t;}

83.二叉树结点定义如下:

    typedefstructBiTNode

{chardata;

structBiTNode*lchild,*rchild;

}BiTNode,*BiTree;

请用递归的方法设计算法,先序、中序、后序遍历各结点输出结点值。

StatusPreorder(BiTreeT)   (5分)

{//先序遍历二叉树

if(T){

visit(T->data);//访问结点

Inorder(T->lchild,visit);//遍历左子树

Inorder(T->rchild,visit);//遍历右子树

StatusInorder(BiTreeT)   (5分)

{//中序遍历二叉树

if(T){

Inorder(T->lchild,visit);//遍历左子树

visit(T->data);//访问结点

Inorder(T->rchild,visit);//遍历右子树

StatusPostorder(BiTreeT)   (5分)

{//后序遍历二叉树

if(T){

Inorder(T->lchild,visit);//遍历左子树

Inorder(T->rchild,visit);//遍历右子树

visit(T->data);//访问结点

供同学们练习用,考试以最后一次课讲课为主,如:

二叉排序树,练习题没有出,但考试是有的。

练习题中给出的答案,只供参考,因为很多题是没有标准答案的。

59.#include

usingnamespacestd;

typedefstructTNode//二叉树结构

{

charnodeValue;//结点的值

TNode*left;//左子树

TNode*right;//右子树

}*BiTree;

voidCreateBiTree(BiTree&T)//中序遍历方式创建二叉树

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

当前位置:首页 > 法律文书 > 判决书

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

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