数据结构练习.docx

上传人:b****5 文档编号:29338251 上传时间:2023-07-22 格式:DOCX 页数:34 大小:103.96KB
下载 相关 举报
数据结构练习.docx_第1页
第1页 / 共34页
数据结构练习.docx_第2页
第2页 / 共34页
数据结构练习.docx_第3页
第3页 / 共34页
数据结构练习.docx_第4页
第4页 / 共34页
数据结构练习.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

数据结构练习.docx

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

数据结构练习.docx

数据结构练习

目录

第1章绪论2

1、填空题2

2、应用题2

第2章线性表3

1、填空题3

2、选择题3

3、判断题4

4、程序设计题4

第3章栈和队列7

1、填空题7

2、选择题7

3、判断题7

第4章串8

1、选择题8

2、判断题8

第6章树和二叉树8

1、填空题8

2、选择题8

3、判断题9

4、应用题9

5、读程序写结果16

第7章图17

1、填空题17

2、选择题17

3、判断题18

4、应用题18

5、程序设计题23

第9章查找23

1、选择题23

2、判断题24

3、应用题24

4、程序设计题26

第10章内部排序27

1、填空题27

2、选择题27

3、判断题28

4、应用题28

第1章绪论

1、填空题

1.常见的数据结构有_线性_结构,__树形___结构,__图形__结构等三种。

2.常见的存储结构有____顺序_存储____结构,_链式存储_____结构等两种。

3.数据的基本单位是_数据元素___,它在计算机中是作为一个整体来处理的。

4.数据结构中的结构是指数据间的逻辑关系,常见的结构可分为两大类,_____线性_和__非线性___。

5.计算机算法必须具备____输入____、_____输出___和____有穷性___、_____确定性___、____可执行____等5个特性

6如果某数据结构的数据元素的集合为S={A,B,C,D,E,F,G},数据元素之间的关系为

R={,,,,,},则该数据结构是一种(B)。

A)线性结构B)树结构C)图结构D)链表结构

7.数据的物理结构有_顺序____和____链表____,逻辑结构有_线性__表___,___图形____和__树_____。

8.已知某算法的实行时间为(n+n2)/2+log2(2n+1),n为问题规模,则该算法的时间复杂度是(C)。

A)O(n)B)O(log2n)C)O(n2)D)O

(1)

2、应用题

1、给出以下算法的时间复杂度.

voidfun(intn)

{

inti=1,k=100;

while(i

{

k=k+1;

i=i+2;

}

}

时间复杂度为_O(n)________。

2、给出以下算法的时间复杂度.

voidfun2(intn)

{

inti=1,k=100;

while(i

{

i=i*10;

k=k+1;

}

}

时间复杂度为___O(log10n)____________。

第2章线性表

1、填空题

1.线性表按照存储结构不同主要有两种实现方式,一种是_线性_表,另一种是___链式___表。

2.顺序表采用_随机___访问机制对数据元素进行访问。

3.若在单链表结点p的后面插入一个新的结点s,则其操作序列为:

①____S->Next=P->Next_____________;

②___P-Next=s____________________;

4.在单向链表中,若要删除某个结点p,一般要找到_p的前驱___结点,才能实现该操作。

2、选择题

1.将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是A。

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

2.在单链表中,如果在结点p之后插入一个新结点s,其操作为A。

(A)s->next=p->next;p->next=s;

(B)p->next=s;s->next=p->next;

(C)s->next=p;p->next=s->next;

(D)p->next=s;s->next=p;

3.若长度为n的线性表采用顺序存储结构,在其第i个位置删除一个元素的算法的平均时间复杂度为(  C )。

(1≤i≤n)

A.O(0)   B.O

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

4.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素需要移动的元素个数为(  b )。

(1≤i≤n+1)

A.n-i  B.n-i+1   C.i   D.n-i-1

5.一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是_______B____。

A)110B)108C)100D)120

6.线性表的顺序存储结构是一种____A______的存储结构,线性表的链式存储结构是一种的存储结构

A)随机存取B)顺序存取C)索引存取D)散列存取

7.有n个元素的线性表,采用顺序存储表示,则将第i个元素(1≤i≤n)删除必须移动(C)个元素。

A)2nB)n-i+1C)n-iD)i

8.在长度为n的顺序存储线性表中,向第i个元素(1<=i<=n+1)之前插入一个新元素时,需要从后向前依次后移_____B个元素。

A)n-iB)n-i+1C)n-i-1D)i

9.顺序表的长度是(B)

A)表中的存储空间数B)表中的数据元素个数

C)存储空间数减去数据元素个数D)存储空间数加数据元素个数

10.对于长度为n的线性表A[1:

n],插入或删除一个元素的时间复杂度为_O(n)__________。

11.线性表的链式存储结构与顺序存储结构相比,优点是(c)。

A)所有的操作算法实现简单    B) 便于随机存取

C)便于插入和删除        D) 节省存储空间

12.带头结点的单链表head为空的判定条件是___B________

A)head==NULLB)head->next==NULL

C)head->next==headD)head!

=NULL

13.在一个单链表中,已经知道q所指结点是p所指结点的前驱结点,若在q和p之间插入s结点,则可以执行__A________

A)s->next=p->next;p->next=s;

B)p->next=s->next;s->next=p;

C)q->next=s;s->next=p;

D)p->next=s;s->next=q;

14在一个单链表中,若删除p所指结点的后续结点(若存在),则修改指针的操作为(A)

A)p->next=p->next->nextB)p=p->next;p->next=p->next->next;

B)p->next=p->next;D)p=p->next->next

15.在循环链表中,可根据任一结点的地址遍历整个链表,而单链表中需知道_头结点____才能遍历整个链表。

16.线性表的顺序存储结构是通过____存储_位置______来直接反映数据元素之间的逻辑关系,而链式存储结构是通过___地址指针_______间接反映数据元素之间的逻辑关系。

17.顺序表中逻辑上相邻的元素的物理位置_____一定______紧邻。

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

3、判断题

1.线性表中每一个元素都有一个前驱和一个后继。

(X)(头结点没有前驱,尾结点没有后继)

4、程序设计题

1、单链表的结点结构定义如下:

structLinkNode

{

LinkNode*next;

intdata;

};

请根据所描述函数的功能写程序。

voidInsert(LinkNode*h,LinkNode*s)

{//h指向链表的头结点(即使链表中没有元素,头结点也存在。

//链表中元素已经递增有序

//函数功能为将结点s插入到链表h中。

插入后链表仍然保持递增的顺序

 

2、设顺序表L是一个递增有序表,试写一算法,将x插入L中,并使L仍是一个有序表。

顺序表的结构定义如下:

#defineListSize100//假定表空间大小为100

structSqList{

   intelem[ListSize];//数组elem用于存放表中的数据

   intlength;//当前的表长度

};

//以上为顺序表的结构

//函数头定义如下

 

3、单链表中结点的结构如下所示:

typedefstructnode

{intdata;

structnode*next;

}node;

请设计满足下述功能的函数。

要求:

建立带头结点的单链表H,要求函数从屏幕上读入m个整数,每读入一个,便生成相应的结点,并且把它插入到链表H的尾部。

函数形式为voidCreateLinkList(node*H)。

第3章栈和队列

1、填空题

1.栈和队列在本质上都是___线性表__________。

2.栈的操作特点是__先进后出_。

队列的操作特点是_先进先出__。

2、选择题

1.消除递归不一定需要使用栈,此说法___A___。

(栈一定可以消除递归)

A.正确   B.错误

2.对于栈,输入序列为(1,2,3,4),不可能得到的输出序列有_D______。

(A)(1,2,3,4) (B)(4,3,2,1) 

(C)(1,3,4,2) (D)(3,1,2,4)

3.用单循环链表表示队列,正确的说法是。

(A)可设一个头指针使入队、出队都方便;

(B)可设一个尾指针使入队、出队都方便;

(C)必须设头尾指针才能使入队、出队都方便;

(D)无论如何,只可能使入队方便。

4.队列用循环数组Q[0.....max-1]实现,尾指针rear指向队尾元素的实际位置,头指针front指向队首元素的前一位,则队列的判空条件是__front==rear________;判满条件是(__rear+1)%max_=Q->front_______;入队是__reat=(rear+1)%max________;出队是__front=(front+1)%max________;

5.输入栈的序列是a1,a2.......an,经由此栈输出的序列共有(B)种。

6.若进栈的序列为1,2,3,4,则以下哪一个不可能是一个出栈序列。

(C)

A)3,2,4,1  B)3,2,1,4  C)4,2,3,1  D)1,3,2,4

7.设计递归问题的非递归算法一般需要用到哪个机制?

(B)

A)数组  B)堆栈  C)队列  D)二叉树

 

3、判断题

1.栈的特点是先进先出。

(先进后出)

2.可以在队列的任意位置插入元素。

(栈可以在任意位置插入)

3.递归程序化非递归程序必须用到栈。

(不一定要用栈,但用栈一定可以实现)

4.如果进栈的序列为(1,2,3,4),则(4,2,3,1)不可能是出栈序列。

(正确)

5.在用顺序表表示的循环队列中,可用标志位来区分队空或队满的条件。

()

4、程序填空题

1.下列程序的功能是将一个10进制正整数x转化为n(2<=n<=10)进制数字并输出,请根据上下文填写正确答案。

structnode

{intelem[maxsize+1];

inttop;//这里约定第一个元素不予使用,也就是top==0代表空栈

};

typedefstructnodestack;

intempty(stack*s);/*判栈空*/

intpush(stack*s,intnum);/*入栈*/

intpop(stack*s,int*num)/*出栈,栈中元素给*num*/

voidmain()

{

stackst;inttemp,x,n;st.top=0;

printf("请输入一个十进制数x,要转换成几进制数n\n");

scanf("%d%d",&x,&n);

while(x!

=0){push(___&st__,____x%n_);x=___x/n;}

while(empty(&st)!

=1){pop(_&st___,_&_temp);printf("%2d",temp);}

printf("\n");

}

第4章串

1、选择题

1.设有两个串p和q,求q在p中首次出现的位置的运算称作(B)

A.连接B.模式匹配C.求子串D.求串长

2、判断题

1.空串和空格串是同一个概念,二者没有区别。

(空串就是生成字符数为0的串,如:

Stringstr="";

空格串就是把空格看成字符的字符串,如:

Stringstr="";

第6章树和二叉树

1、填空题

1.一棵62个叶结点的完全二叉树,最多有___124______个结点。

2.若规定仅有根的二叉树的高度为1,那么高为h的完全二叉树最多有________2^h-1_______个结点,最少有___2^(h-1)______个结点。

3.设只包含有根结点的二叉树的高度为0,则高度为k的二叉树的最大结点数为____2^(k+1)-1____________,最小结点数为_________k+1______。

4.设仅包含根结点的二叉树的高度为1,则高度为k的二叉树的最大结点数为_______2^k-1_________,最小结点数为____k____。

2、选择题

1.具有N个结点的完全二叉树的深度是__B____。

(A)⌊log2N⌋(B)⌊log2N⌋+1

(C)⌊log2(N)⌋(D)⌊log2N⌋-1

2.设二叉树的树根为第一层,则第i层上至多有____C___结点。

(A)1 (B)2 (C)2i-1 (D)2i-1

3.将一棵有100个结点的完全二叉树从根这一层开始,按照从上至下、从左到右的顺序依次对结点进行编号,根结点的编号为1,则编号为49的结点的左孩子编号为(A)

A)98B)99C)50D)48

4.设以为n1表示一个n阶(n≥2)的二叉树中,出度为1个结点的数目,若它是一个完全二叉树,则必成立(A)式。

A)n1=0或1B)n1=0C)n1=1D)n1>0

5.具有2000个结点的二叉树,其高度至少为(C)。

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

3、判断题

1.二叉树的左右子树次序是严格的,不能够任意改变。

(正确)

2.若根为第一层,则深度为k的满二叉树的结点为2^k-1。

(正确)

3.二叉树的三叉链表存储结构可以方便的访问到双亲结点。

(正确)

4、应用题

1.在一段文字中,共出现a、b、c、d、e、f六种字符,每种字符出现的频率分别为7,9,12,22,23,27。

请回答下列问题:

(1)什么是哈夫曼树?

(带权路径最小的二叉树,称为哈夫曼输)(3分)

(2)根据题目所给频率值,画出相应的哈夫曼树。

(11分)

(3)给出各个字符对应的哈夫曼编码。

(左子树的边编码为0,右子树的边编码为一,然后按自顶向下写)(6分)

(4)该段文字经过哈夫曼编码后,长度是多少。

(各子树根节点的值的和)(4分)

参考答案如下:

(1)答案为:

(3分)

(2)根据题目所给频率值,画出相应的哈夫曼树。

(11分,每个结点1分)

 

(3)给出各个字符对应的哈夫曼编码。

(6分)

(4)该段文字经过哈夫曼编码后,长度是多少。

(4分)

 

2.设一棵二叉树的先序遍历序列为abcde,中序遍历序列为badce,请画出对应的二叉树,并写出对应后序遍历序列。

(15分)

 

 

3.通信报文中出现的字符A、B、C、D、E,在报文中出现的频率分别为0.23、0.2、0.32、0.12、0.13,分别给出相应字符的哈夫曼编码(要求画出哈夫曼树,并且把权值小的结点放在左边)。

(共14分)

 

4.某二叉树结点的中序序列为H,B,C,D,E,F,G,后序序列为B,D,C,H,F,G,E,请据此画出该二叉树,再给该树加上中序线索。

(共15分)

 

 

 

5.请证明对于任何一棵二叉树,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。

(10分)

 

6.请按照孩子-兄弟表示法,将图1所示树转化为二叉树。

(共14分)

 

 

 

 

7.设二叉树如图2所示。

分别写出它的先序遍历、中序遍历、后序遍历序列。

(共15分)

 

8.

(1)写出如图所示二叉树的中序遍历结果。

(8分)

(2)画出二叉树的中序后继线索。

(10分)

 

 

9.

已知某二叉树的前序遍历序列为:

ABCDEFG和中序遍历序列为:

CBEDAFG。

请画出该二叉树。

 

10.

已知通信联络中只可能出现A、B、C、D、E、F、G、H共8种字符,其出现次数分别为5,28,7,9,14,23,3,11次。

(1)请画出赫夫曼树(权值小的结点在左边)。

(15分)

(2)计算该树的带权路径长度。

(3分)

 

 

5、读程序写结果

已知二叉树的结点结构如下:

structNode

{

intdata;

Node*lchild,*rchild;

};

某棵二叉树的形态如右图:

根据要求解答下题:

1、(共5分)

intfun1(Node*root)

{

if(root==0)return0;

intl,r;

l=fun1(root->lchild);

r=fun1(root->rchild);

if(l>=r)returnl+1;

elsereturnr+1;

}

(1)当root是指向结点A的指针时,函数fun1的返回值是多少?

(2分)

(2)函数fun1的功能是什么?

(3分)

2、(共6分)

intfun2(Node*root)

{

if(root==0)return0;

intl=fun2(root->lchild);

intr=fun2(root->rchild);

returnl+r+1;

}

(1)当root是指向结点A的指针时,函数fun1的返回值是多少?

(2分)

(2)函数fun1的功能是什么?

(4分)

第7章图

1、填空题

1.有n个顶点的有向连通图最多有条边,最少有条边。

2.具有n个顶点的完全无向图有________条边,完全有向图有________条边。

2、选择题

1.__________方法可以判断出一个有向图中是否有环(回路)。

(A)深度优先遍历(B)拓扑排序  

(C)求最短路径 (D)求关键路径

2.关键路径是指__________。

(A)从开始事件到终止事件路径长度最短的路径

(B)从开始事件到终止事件路径长度最长的路径

(C)从开始事件到终止事件活动最少的路径   

(D)从开始事件到终止事件活动最多的路径 

3.在一个图中,所有顶点的度数之和等于所有边数的__________倍。

A)1/2B)1C)2D)4

4.若连通图的顶点个数为n,则该图的生成树的边数为__________条。

5.图的遍历方式有_______和_______两种。

3、判断题

1.具有n个顶点的有向图最多有n*(n-1)条边。

()

2.在AOV-网中,不应该出现有向环,因为存在环就意味着活动可以以自己为先决条件。

()

4、应用题

1、已知某图的存储结构如下,试写出该图从顶点A开始的深度优先遍历序列。

(11分)

A

B

C

D

E

F

G

H

I

J

K

A

0

1

1

1

1

1

0

0

0

0

0

B

0

0

0

0

0

0

1

0

0

0

0

C

0

0

0

0

0

0

0

1

0

0

0

D

0

0

0

0

0

0

0

0

1

0

0

E

0

0

0

0

0

0

0

0

0

1

0

F

0

0

0

0

0

0

0

0

0

0

1

G

0

1

0

0

0

0

0

0

0

0

0

H

0

0

1

0

0

0

0

0

0

0

0

I

0

0

0

1

0

0

0

0

0

0

0

J

0

0

0

0

1

0

0

0

0

0

0

K

0

0

0

0

0

1

0

0

0

0

0

 

2.请给出图1的所有最小生成树。

(10分)

 

 

 

 

3.请给出图2的所有拓扑排序序列。

(16)

 

4、对于有向无环图(如图2),写出它的所有不同的拓扑有序序列。

(共16分)

6.已知某图采取如图2所示的邻接矩阵表示法,请回答下列问题。

(共12分)

0

1

2

3

4

5

6

1

A

1

0

1

1

0

0

0

2

B

2

1

0

0

1

1

0

3

C

3

1

0

0

0

1

1

4

D

4

0

1

0

0

0

0

5

E

5

0

1

1

0

0

0

6

F

6

0

0

1

0

0

0

图2

(1)请画出该图。

(6分)

(2)对其从顶点A开始进行深度优先遍历,写出遍历序列。

(6分)

(1)

 

 

7、(本题总计7分)

构造该图的最小生成树。

 

图的最小生成树如下——每条边1分,共7分

 

 

 

8.给定数据结构,V为结点的有限集合,V={v1,v2,v3,v4,v5,v6,v7,v8},E是V上关系的集合。

E={,,,,,,,,}

它对应的图形是A。

图的存储结构主要有邻接表和B,若用邻接表来存储一个图,则需要保存一个C存储的结点表和若干个D存储的关系表(又称边表)。

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

当前位置:首页 > 考试认证 > 从业资格考试

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

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