数据结构期末综合练习
2013年12月
期末综合练习一
一、单项选择题
1. 数据结构在计算机内存中的表示是指 ( ) 。
A.数据元素之间的关系 B.数据的存储结构
C.数据元素的类型 D.数据的逻辑结构
2 .结构中的元素之间存在一对多的关系是()。
A.集合 B.线性结构
C.树形结构 D.图状结构
3 .对不带头结点的单向链表,判断是否为空的条件是()(设头指针为head)。
A.head==NULL B.head->next= =NULL
C.head->next= =head D.head =NULL
4.设有一个长度为20的顺序表,要在第5个元素之前插入1个元素(也就是插入元素作为新
表的第5个元素),则移动元素个数为()。
A.15 B.16 C.5 D.4
5.在一个不带头结点的单循环链表中,p、q分别指向表中第一个结点和尾结点,现要删除第一个结点,可用的语句是()。
A.p=q->next;p=p->next; B.p->next=q ;p=p->next;
C.p->next=q->next;q=p; D.p=p->next; q->next=p;
6.在一个尾指针为rear的不带头结点的单循环链表中,插入一个s所指的结点,并作为第一个结点,可执行()。
A.rear→next= s; s→next=rear→next B.rear→next=s→next;
C.rear=s→next D.s→next=rear→next ;rear→next=s;
7.一个栈的进栈序列是1,2,3,4,5,则栈的不可能输出序列是()(进栈出栈可以交替进行)。
A.12345 B.43512 C.45321 D.54321
8.元素a,b,c,d按顺序依次进栈,则该栈的可能输出序列是()(进栈出栈可以交替进行)。
A.c,a,b,dB.d,b,c,a
C.a,c,b,dD.d,c,a,b
9.一个队列的入队序列是2,4,6,8,按该队列的输出序列使各元素依次入栈,该栈的可能输出序列是()。
A.8,6,4,2 B.6,2,4,8
C.8,4,2,6D.8,2,4,6
10.从一个栈顶指针为top的链栈中取栈顶元素,用变量x保存该元素的值,则执行()。 A.x=top->data; top=top→next; B.x=top->data;
C.top=top->next; x=top->data; D.top=top->next; x=data;
11.在一个链队中,假设f和r分别为队头和队尾指针,已生成一个结点p,要为结点p赋
值x,并入队的运算为()。
A .p->data=x; p->next=NULL; f->next=p; f=p;
B.p->data=x; p->next=NULL ;r->next=p;r=p;
C.p->data=x; p->next=r;r=s;
D.p->data=x; p->next=f;f=s;
12.设有一个对称矩阵A,采用压缩存储的方式,将其下三角部分以行序为主序存储到一维数组B中(数组下标从1开始),B数组共有55个元素,则该矩阵是()阶的对称矩阵。
(矩阵中的第1个元素是a1,1)
A.5 B.20 C.10 D.15
13.设有一个25阶的对称矩阵A,采用压缩存储的方式,将其下三角部分以行序为主序存储
到一维数组B中(数组下标从1开始),则矩阵中元素.a7,6在一维数组B中的下标是()。 (矩阵中的第1个元素是a1,1)
A.34 B.14 C.26 D.27
14.设有一个18阶的对称矩阵A,采用压缩存储的方式,将其下三角部分以行序为主序存储到一维数组B中(数组下标从1开始),则数组中第53号元素对应于矩阵中的元素是()。(矩阵中的第1个元素是a1,1)
A.a8,5 , B.a10,8 C.a8,1, D.a7,6
15.以下程序段的结果是 c的值为()。
char a[8]=“1236789”, int *p=a, int c=0;
while(*p++)c++;
A.8, B.7 C.10 D.12
16.以下程序段的结果是 c的值为()。
char * a[5]={“12378”,“1237”,“1236789”,“1237”,“123708”};
int i,c=0;
for(i=0;i<5:i++)
if(StrCmp(a[i],“1237”)==0)c++;
A.2, B.5 C.0 D.1237
17.一棵有23个结点,采用链式存储的二叉树中,共有()个指针域为空。
A.24B.25C.23D.45
18.一棵采用链式存储的二叉树中,共有n个指针域被有效使用(即指针域为非空)。该二叉树有()个结点。
A.n+1 B.n C.n-1 D.n-2
19.在一棵二叉树中,若编号为i的结点是其双亲结点的左孩子,则双亲结点的顺序编号为()。
A.i/2B.2i-1 C.2i+1 D.i/2-1
20.在一棵二叉树中,若编号为i的结点是其双亲结点的右孩子,则双亲结点的顺序编号为()。
A.i/2.0B.i/2+1C.2i+1 D.i/2向下取整
21.设一棵哈夫曼树共有2n+1个叶结点,则该树有()个叶结点。
A.n-1 B.n C.n+1 D.2n
22.设一棵采用链式存储的二叉树,除叶结点外每个结点度数都为2,该树结点中共有2n个指针域为空。则该树有()个叶结点。
A.2n B.2n+1 C.2n+2 D.n
23.已知如图1所示的一个图,若从顶点a出发,按深度优先搜索法进行遍历,则可能得到的一种顶点序列为()。
A.abecdf B.acfebd C.aebcfd D.aedbfc
图1
24.已知如图2所示的一个图,若从顶点a出发,按广度优先搜索法进行遍历,则可能得到的一种顶点序列为()。
A.acedfbB.aecfdbC.aecdfbD.acebfd
图2
25.已知如图3所示的一个图,若从顶点B出发,按广度优先法进行遍历,则可能得到的一种顶点序列为()。
A.BADEHCFG
B.B ADEHCGF
C.BADECHFG
D.BADEHCFG
图3
26.一组记录的关键字序列为(42,37,62,40,32,92),利用快速排序算法,以第一个关
键字为分割元素,算法经过一次划分后结果为()。
A.32,37,40,42,62,92 B.37,32,40,42,62,92
C.32,40,37,42,62,92 D.32,37,42,40,62,92
27.一组记录的关键字序列为(46,38,56,40,79,84),利用快速排序,以第一个关键字
为分割元素,经过一次划分后结果为()。
A.40,38,46,79,56,84 B.40,38,46,56,79,84
C.40,38,46,84,56,79 D.38,40,46,56,79,84
28.一组记录的关键字序列为(80,57,41,39,46,47),利用堆排序(堆顶元素是最小元素)
的方法建立的初始堆为()。
A.39,46,41,57,80,47 B.39,47,46,80,41,57
C.41,39,46,47,57,80 D.39,80,46,47,41,57
29.在有序表{21,23,28,33,43,45,46,73,77,78,89,99,106}中,用折半查找值
43时,经()次比较后查找成功。
A.6 B.3 C.8 D.4
二、填空题
1.数据元素可以有一个或________组成。
2. 本书中介绍的树形结构和_______ 属非线性结构。
3. 结构中的数据元素存在一对一的关系称为线性结构。而数据元素存在_______ 的关系
称为图状结构。
4.设有一个长度为18的顺序表,要在第4个元素之前插入2个元素(也就是插入元素作为新表的第5个和第4个元素),则最少要移动元素的个数为()。
5.设有一个长度为25的顺序表,要删除前3个元素,则最少要移动元素的个数为()。
6.在双向链表中,要删除p所指的结点,可以先用语句(p->prior)->next=p->next;然
再用语句________。
7.在双向链表中,要删除p所指的结点,其中所用的一条语句(p->prior)->next=p->next;
的功能是:使P所指结点的直接前驱的右指针指向________。
8.在一个单向链表中p所指结点之后插入一个s所指向的结点时,应执行s->next=p->next; 和_______的操作.
9.设有一个头指针为head的单向链表,p指向链表中的某结点,若要使该链表成为单向
循环链表,可用语句while(p->next!=NULL) p= p->next; 和____ ____。
10.一个栈和一个队列的输入序列都为abcdefg,它们可能有相同的输出序列吗?_________。(若没有则回答没有,若有则写出序列,进栈出栈可以交替进行)。
11.向一个栈顶指针为top的链栈中插入一个p所指结点时,某人用语句top=p;p->next=top; 这样做的结果使p所指向的结点的指针域指向了_______。
12.从一个栈顶指针为top的链栈中取栈顶元素,用d保存栈顶元素的值,可执行
________。(结点的数据域为data)
13.在一个链队中,设front和rear分别为队头和队尾指针,则s所指结点(数据域已赋值)的入队操作为s->next=NULL;.________和rear=s;
14. 循环链队列中,设front和rear分别为队头和队尾指针,(最多元素为MaxSize,),判断循环
链队列为空的条件是________为真。
15.设有n阶对称矩阵A,用一维数组s压缩存储A的下三角元素,s的下标从零开始,元素s[26]相应于A中的元素为_______。(矩阵中的第1个元素是a1,1)
16. 对稀疏矩阵进行压缩存储,可采用三元组表,设a是稀疏矩阵A相应的三元组表类型(结
构体类型)变量,a中的一个成员项是三元组类型的结构体数组data,按书中定义,若
a.data[0].i=2;a.data[0].j=3;a.data[0].v=16; 它提供的A数组的相关信息有_______
17.对稀疏矩阵进行压缩存储,可采用三元组表,设a是稀疏矩阵A相应的三元组表类型(结构体类型)变量,a中的一个成员项是三元组类型的结构体数组data,按书中定义,若data 的下标从零开始,最后一个元素下标为10,又a.data[10].i=8;a.data[10].j=5;a.data[10].v=36; 它提供的A矩阵的相关信息有_______。
18.设有一棵深度为5的完全二叉树,该树共有20个结点,第五层上有个叶结点。
(根所在结点为第1层)
19.设有一棵有78个结点的完全二叉树,该树共有_________层。(根所在结点为第1层)20.________树可得到一个有序序列。
21.对于一棵具有________个结点的二叉树,其相应的链式存储结构中共有n+1个指针域空. 22.如图4所示的二叉树,其后序遍历序列为_________。
图4
23.如图5所示的二叉树,其中序遍历序列为_________。
图5
24 .给定一组权重值,构造哈夫曼树,哈夫曼树的高度一定是唯一的,这种说法是__________的。(回答正确或不正确)
三、综合题
1.(1)已知某二叉树的后序遍历序列是debca,中序遍历序列是dbeac,试画出该二叉树。
(2)若上述二叉树的各个结点的字符分别代表不同的整数(其中没有相等的),并恰好使该树成为一棵二叉排序树,试给出a、b、c、d、e的大小关系。
(3)给出该树的前序遍历序列。
2. (1) 说明什么是顶点活动网(AOV网)和拓扑序列
(2)设有向图G如下,写出3种拓扑序列,
(3)在图G中增加一条边,使图G仅有一条拓扑序列
图6
3.(1)利用筛选过程把序列{42,82,67,102,16,32,57,52}建成堆(小根堆),画出相应的完全二叉树(不要求中间过程)。
(2)写出对上述堆对应的完全二叉树进行中序遍历得到的序列。
4.如下是一棵二叉排序树,A1,A2,…A9代表1,2,3,…9中各个不同数字,
(1)给出对该树中序遍历的结果
(2)A3,A5,A7的值各为多少?
(3)请在该树中再插入一个结点9 .5作为叶结点,并使它仍然是一棵二叉排序树
图7
5.设查找表为(11,12,13,14,15,16,17,18,19,20,21) ,元素的下标从0开始。
(1)画出对上述查找表进行折半查找所对应的判定树(树中结点用数值表示)
(2)说明成功查找到元素15,19各需要经过多少次比较?
(3)说明查找不到元素10,15.5各需要经过多少次比较?
(4)給出中序遍历判定树的序列。
6.
(1) 设有查找表{17,26,14,16,15,30,18,19,28},依次取表中数据构造一棵二叉排序树.
(2)对上述二叉树给出后序遍历的结果
(3).对上述二叉树给出中后序遍历的结果
(4))在上述二叉树中查找元素15共要进行多少次元素的比较?
四、程序填空题
1 .以下程序是折半插入排序的算法
设待排序的记录序列存放在a[1],…a[n]中,以a[0]作为辅助工作单元,以下程序是要把a[i]插入到已经有序的序列a[1],…a[i-1]中。
void binsort (NODE a[ ],int n)
{ int x,i,j,s,k,m;
for (i=2;i<=__(1)___;i++)
{ a[0]=a[i];
x= a[i].key;
s=1;
j=i-1;
while (s<=j)
{ m=__(2)___
if( x __(3)___ else __(4)___ } for ( k=i-1;k>=j+1;k- -) __(5)___=a[k]; a[j+1]=a[0]; } } 2.以下函数是二叉排序树的查找算法,若二叉树为空,则返回根结点的指针,否则,返回值是指向树结点的结构指针p(查找成功p指向查到的树结点,不成功p指向为NULL)完成程序中的空格 typedef struct Bnode { int key; struct Bnode *left; struct Bnode *right; Bnode *BSearch(Bnode *bt, int k) /* bt用于接收二叉排序树的根结点的指针,k用以接收要查找的关键字*/ { Bnode *p; if(bt== ___(1)_____) return (bt); p=bt; while(p->key!= __(2)______) { if(k ___(3)_____; else___(4)_____; if(p==NULL) break; } return(___(5)_____); } 3.以下函数为链栈的进栈操作,x是要进栈的结点的数据域,top为栈顶指针struct node { ElemType data; struct node *next; }; struct node *top ; void Push(ElemType x) { struct node *p; p=(struct node*)malloc(___(1)_____); p->data=x; ___(2)_____; _____(3)___; } } 4 .设有一个头指针为head的不带头结点单向链表,p、q是指向链表中结点类型的指针变 量,p指向链表中结点a, (设链表中没有结点的数据域与结点a的数据域相同),写出相关语句 (1).使该单向链表成为单向循环链表 (2)插入结点s,使它成为a结点的直接前驱 q=p; x=p->data; while (__(1)___)q=q->next; q->next=head; q=p; p=p->next; while(p->data!=x) { q=p; } s->next=p; __(3)___ 期末综合练习一答案 一、单项选择题 1.B 2.C 3.A 4 .B5.D6.D7.B8.C9.A 10.B 11.B 12.C13.D 14.B15.B16.A17.A18.A19.A 20.D21.C22.D 23.D24.C25.C26.A27.B28.A29.B 二、填空题 1.多个数据项 2.图状结构 3.多对多 4.15 5.22 6.(p->next)->prior=p->prior; 7.P所指结点的直接后继 8.p->next=s; 9.p->next=head; 10.abcdefg 11.p本身 12.d=top->data; 13.rear->next=s; 14.front= =rear 15.a7,6 16.A的第一个非零元素的下标为2,3 ,元素为16 17.A共有11个非零元素,a8,5为36 18.5 19.7 20.中序遍历 21.n 22.519876432 23.5387946 24.不正确 三、综合应用题 图8 (2)d 2. (1) 用顶点表示活动,边表示活动间先后关系的有向图称为顶点活动网 在顶点活动网中,若不存在回路,则所有活动可排列成一个线性序列,使每个活动的所 有前驱活动都排在该活动的前面,称此序列为拓扑序列 (2) abdc adbc dabc (3) 在 b 和d 间添加有向边 3.(1 图9 (2)102,52,42,82,16,67,32,57 4. 初始树堆 (1) A7 A4 A8 A2 A5 A9 A1 A3 A6 1 2 3 4 5 6 7 8 9 (2) 8 5 1 (3) 图10 5. 图11 (2) 4次2次 (3)3次4次 (4)11,12,13,14,15,16,17,18,19,20,21 6. (1)见图12 (2) 15,16,14,19,18,28,30,26,17 (3) 14,15,16,17,18,19,26,28,30 (4) 4 图12 四、程序填空题 1. (1) n (2) (s+j)/2; (3) j=m-1; (4) s=m+1; (5) a[k+1] 2.(1)NULL (2)k (3)p=p->left (4)p=p->right (5)p 3 (1)sizeof (struct node) (2)p->next=top (3)top=p 4. (1)q->next!=NULL (2) p=p->next; (3)q->next=s; 期末综合练习二 一、单项选择题 1. 在数据结构和算法中,与所使用的计算机有关的是()。 A.数据元数间的抽象关系 B.数据的存储结构 C.算法的时间复杂度 D.数据的逻辑结构 2. 一种逻辑结构在存储时()。 A.只要存储数据元素间的关系 B.只能采用一种存储结构 C.可采用不同的存储结构 D.只要存储数据元素的值 3 .对顺序表,以下叙述中正确的是 ( )。 A.用一组地址连续的存储单元依次存放线性表的数据元素 B.各个数据元素的首地址是连续的 C.数据元素不能随机访问 D.插入操作不需要移动元素 4 .对链表,以下叙述中正确的是()。 A.不能随机访问任一结点 B.结点占用的存储空间是连续的 C.插入删除元素的操作一定要要移动结点 D.可以通过下标对链表进行直接访问5.设有一个长度为25的顺序表,要删除第10个元素(下标从1开始),需移动元素的个数为()。 A.9 B.10 C.15 D.16 6.线性表在存储后,如果相关操作是:要求已知第i个结点的位置访问该结点的前驱结点,则采用()存储方式是不可行的。 A.单链表 B.双链表 C.单循环链表 D.顺序表 7.设单向链表中,指针p指向结点A,若要删除A的直接后继,则所需修改指针的操作为 ( )。 A.p->next=p->next->next; B.p=p->next; C.p=p->next->next; D.p->next=p ; 8.栈和队列的共同特点是()。 A.都是先进后出 B.元素都可以随机进出 C.只容许在端点处插入和删除元素 D.都是先进先出 9.元素1,3,5,7按顺序依次进栈,按该栈的可能输出序列依次入队列,该队列的可能输出序列是()。(进栈出栈可以交替进行)。 A.7,5,3,1 B.7,3,1,5 C.7,5,1,3 D.5,1,3,7 10.元素2,4,6,8按顺序依次进栈,按该栈的的可能输出序列依次入队列,该队列的可能输出序列是()(进栈出栈可以交替进行)。 A.8,6,2,4 B.8,4,2,6 C.6,2,4,8 D.8,6,4,2 11 .对一个栈顶指针为top的链栈进行进栈操作,设P为待进栈的结点,则执行()。 A.p=top->next; top=top→next; B.p->next=top; C.p->next=top;top=p; D.top=p; 12.在一个不带头结点的链队中,假设f和r分别为队头和队尾指针,则从该对列中删除一个结点并把结点的值保存在变量x中的运算为()。 A.x=r→data;r=r→next; B.r=r→next;x=r→data C.x=f→data;f=f→next; D.f=f→next;x=f→data 13.设有一个18阶的对称矩阵A,采用压缩存储的方式,将其下三角部分以行序为主序存储到一维数组B中(数组下标从1开始),则数组中第33号元素对应于矩阵中的元素是()。(矩阵中的第1个元素是a1,1) A.a7,6 B.a10,8C.a9,2 D.a8,5 14.设有一个20阶的对称矩阵A,采用压缩存储的方式,将其下三角部分以行序为主序存储到一维数组B中(数组下标从1开始),则数组中第38号元素对应于矩阵中的元素是()。(矩阵中的第1个元素是a1,1) A.a10,8 B.a7,6 C.a9,2 D.a8,5 15.设有一个17阶的对称矩阵A,采用压缩存储的方式,将其下三角部分以行序为主序存储 到一维数组B中(数组下标从1开始),则矩阵中元素a10,6在一维数组B中的下标是()。(矩阵中的第1个元素是a1,1) A.45, B.18 C.51 D.53 16.在C语言中,分别存储“S”和‘s’,各需要占用()字节。 A.一个和两个 B.两个 C.一个 D.两个和一个 17.串函数StrCmp(“ABCd”,“ABCD”)的值为()。 A.0 B.-1 C.1 D.3 18.一棵有n个结点,采用链式存储的二叉树中,共有()个指针域被有效使用(即指针域为非空)。 A.n+1 B.n C.n-1 D.n-2 19.一棵采用链式存储的二叉树中有n个指针域为空,该二叉树共有()个结点。 A.n+1 B.n C.n-1 D.n-2 20.在一棵二叉树中,若编号为i的结点存在双亲结点,则双亲结点的顺序编号为()。 A.i/2.0B.i/2向下取整C.2i+1 D.i+2 21.设一棵哈夫曼树共有n个非叶结点,则该树有()个结点。 A.2n B.2n+2 C.2n-1 D.2n+1 22.设一棵哈夫曼树共有2n+1个结点,则该树有()个非叶结点。 A.n B.n+1 C.n-1 D.2n 23.一棵结点数31 24.一棵完全二叉树共有4层,且第4层上有2个结点,该树共有()个非叶子结点(根为第一层)。 A.5B.4C.3D.9 25.已知如图1所示的一个图,若从顶点a出发,按深度优先搜索法进行遍历,则可能得到的一种顶点序列为()。 A.abedfc B.acfebd C.aebcfd D.aedfbc 图1 26.如图2所示的一个图,若从顶点a出发,按广度优先搜索法进行遍历,则可能得到的一种顶点序列为()。 A.abedfc B.acfebd C.aebcdf D.aebcfd 图2 27.一组记录的关键字序列为(46,20,30,79,56,38,40,84,90,110),利用快速排序,以第一个关键字为分割元素,经过一次划分后结果为()。 A.20,30,40,38,46,79,56,84,90,100 B.40,20,30,38,46,56,79,84,90,110 C.30,20,40,38,46,84,56,79,90,100 D.20,30 38,40,46,56,79,84,90,100 28.一组记录的关键字序列为(56,30,89,66,48,50,94,87,100),利用快速排序,以第一个关键字为分割元素,经过一次划分后结果为()。 A.30,50,48,56,66,89,94,100,87B. 50,30,48,56,66,89,94,87,100 C.48,30,50,56,66,89,94,87,100D.50,30,48,66,56,89,94,87,100 29.一组记录的关键字序列为(75,63,95,80,53,45,38,20),利用堆排序(堆顶元素是最大元素)的方法建立的初始堆为()。 A.95,80,75,63,53,45,38,20 B.95,63,75,80,53,45,38,20 c. 95, 80, 45, 63, 53, 75, 38, 20 D.95, 80, 75, 20, 53, 45, 38, 63 30.线性表以()方式存储,能进行折半查找。 A.关键字有序的链接B.顺序 C.关键字有序的顺序D.数组 二、填空题 1.数据元素之间的抽象关系称为________结构。 2. 数据的逻辑结构在计算机中的表示称为________结构。 3.要求在n个数据元素中找值最大的元素,其基本操作为________。算法的时间复杂 度为_______ 。 4. 求两个n阶矩阵的乘积,算法的基本操作为________,时间复杂度为________。 5.设有一个长度为25的顺序表,第8号元素到第25号元素依次存放的值为 8,9,10,11,…,25,某人想要删除第8个元素,他的做法是从第25号元素开始,直到第9号元素依次向前移动1个位置,其结果新表中第9号元素的值为()。 6.设有一个长度为25的顺序表,第8号元素到第25号元素依次存放的值为8,9,10,11,…25, 某人想要在第8个元素前插入1个元素7(也就是插入元素作为新表的第8个元素),他的做法是从第8号元素开始,直到第25号元素依次向后移动1个位置,然后把7存放在 8号位置,其结果是新表中第25号元素的值为()。 7.在双向链表中,要在p所指的结后插入q所指的结点(设q所指的结点已赋值),可以先用语句q->next=p->next; (p->next)->prior=q; 然后再用语句q->prior=p;和语句________。 8.在双向链表中,要在p所指的结后插入q所指的结点(设q所指的结点已赋值),其中所用的一条语句(p->next)->prior=q;的功能是使P所指结点的_______指向q 。9.在一个单向链表中,要删除p所指结点的直接后继结点。则可以用操作________。(用一条语句) 10.设有一个带头结点的,头指针为head的单向链表,p指向表中某一个结点,且有p->next= =NULL,现要删除头结点,并使该单向链表构造成单向循环链表,通过 操作head=head->next; ________。 11.向一个栈顶指针为top的链栈中插入一个p所指结点时,可执行________操作。 ( 填两条语句, 结点的指针域为next) 12.从一个栈顶指针为top的链栈中删除一个结点时,用d保存被删结点的值,可执行________。(结点的指针域为next,数据域为data) 13.在一个带头结点的链队中,设front和rear分别为队头和队尾指针,则删除一个结点 的操作为p=front->next;_______=p->next;(结点的指针域为next, p为辅助用指针) 14 循环链队列中,设front和rear分别为队头和队尾指针,(最多元素为MaxSize,采用少用一个元素的模式),判断循环链队列为满的条件为________ 。 15.设有n阶对称矩阵A,用一维数组s压缩存储A的下三角元素,s的下标从零开始,最后一个元素的下标为27,则n=_______。(矩阵中的第1个元素是a1,1) 16.对稀疏矩阵进行压缩存储,可采用三元组表,一个6行7列的稀疏矩阵A相应的三元组 表共有8个元素,则矩阵A共有_______个零元素。 17. 一棵3度的树,其中3度结1个,2度结2个,1度结2个,则该树共有_______个 叶结点。 18.一棵有8个权重值构造的哈夫曼数,共有个结点。 19.一棵有7个叶结点的二叉树,其1度结点数的个数为2,则该树共有 _______个结点 20.一棵有18个结点的二叉树,其2度结点数的个数为8,则该树共有 _______个1度结点 21.如图3所示的二叉树,其中序遍历序列为_________。 图3 _________。 图4 23.二叉排序树或者是一棵空树,或者是一棵具有下列性质的二叉排:若它的左子树非空,则左子树的所有结点的值都小于它的根结点的值;若它的右子树非空,则右子的所有结点的值都大于(若允许结点有相同的值,则大于等于)它的根结点的值。这种说法是__________的。(回答正确或不正确) 24.在查找表中,通过记录的某关键字能唯一地确定一个记录,该关键字称为_________。 三、综合题 1. (1) 以3,4,5,8,9,10作为叶结点的权,构造一棵哈夫曼树。 (2) 给出相应权重值叶结点的哈夫曼编码。 (3) 一棵哈夫曼树有2n-1个结点,它是共有多少个权重值构造而成的?简述理由? 2.(1)对给定权值3,1 ,4,4,5,6,构造深度为5的哈夫曼树。(设根为第1层) (2) 求树的带权路径长度。 (3)链接存储上述哈夫曼树,结点中共有多少个指针域为空,说明理由. 3.(1)简述拓扑排序的步骤。 (2)说明有向图的拓扑序列不一定是唯一的原因。 (3)如何利用拓扑排序算法判定图是否存在回路。 (4)设有向图G如下,写出首先删除顶点1的3种拓扑序列。 图5 4. (1) 如下的一棵树,给出先序遍历序列 (2) 把1,2,3,4,5,6,7,8,9填人,使它成为一棵二叉排序树 提示:设图中的树是二叉排序树,找出中序遍历序列与1,2,…9的对应关系 (3) 请在该树中再插入一个结点3.5作为叶结点,并使它仍然是一棵二叉排序树。 图6 5.设有序表为(21,22,23,24,25,26,27,28,29,30,31,32),元素的下标从0开始。 (1)说出有哪几个元素需要经过4次元素间的比较才能成功查到。 (2)画出对上述有序表进行折半查找所对应的判定树(树结点用数值表示) (3)设查找元素为5,需要进行多少次元素间的比较才能确定不能查到。 (4)求在等概率条件下,成功查找的平均比较次数? 6.设查找表为(5,6,7,8,9,10,11,12,13,14) (1)画出对上述有序表进行折半查找所对应的判定树(要求以数据元素作为树结点) (2)给出二叉排序树的定义,针对上述折半查找所对应的判定树的构造过程,说明判定树 是否是二叉排序树(设树中没有相同结点)? (3)为了查找元素5.5,经过多少次元素间的比较才能确定不能查到? 四、程序填空题 1.以下程序是快速排序的算法 设待序的记录序列存放在a[start],…a[end]中,按记录的关键字进行快速排序,先进行一次划分,再分别进行递归调用 void quicksort ( NODE a[ ], int start ,int end ) { int i,j; NODE mid ; if (start>=end ) return; i=start; j=end; mid=a[i]; while (i { while(i j- -; .. ;.. 第一章 概论 1.数据结构描述的是按照一定逻辑关系组织起来的待处理数据元素的表示及相关操作,涉及数据的逻辑结构、存储结构和运算 2.数据的逻辑结构是从具体问题抽象出来的数学模型,反映了事物的组成结构及事物之间的逻辑关系 可以用一组数据(结点集合K )以及这些数据之间的 一组二元关系(关系集合R )来表示:(K, R) 结点集K 是由有限个结点组成的集合,每一个结点代表一个数据或一组有明确结构的数据 关系集R 是定义在集合K 上的一组关系,其中每个关系r (r ∈R )都是K ×K 上的二元关系 3.数据类型 a.基本数据类型 整数类型(integer)、实数类型(real)、布尔类型(boolean)、字符类型(char )、指针类型(pointer ) b.复合数据类型 复合类型是由基本数据类型组合而成的数据类型;复合数据类型本身,又可参与定义结构更为复杂的结点类型 4.数据结构的分类:线性结构(一对一)、树型结构(一对多)、图结构(多对多) 5.四种基本存储映射方法:顺序、链接、索引、散列 6.算法的特性:通用性、有效性、确定性、有穷性 7.算法分析:目的是从解决同一个问题的不同算法中选择比较适合的一种,或者对原始算法进行改造、加工、使其优化 8.渐进算法分析 a .大Ο分析法:上限,表明最坏情况 b .Ω分析法:下限,表明最好情况 c .Θ分析法:当上限和下限相同时,表明平均情况 第二章 线性表 1.线性结构的基本特征 a.集合中必存在唯一的一个“第一元素” b.集合中必存在唯一的一个“最后元素” c.除最后元素之外,均有唯一的后继 d.除第一元素之外,均有唯一的前驱 2.线性结构的基本特点:均匀性、有序性 3.顺序表 a.主要特性:元素的类型相同;元素顺序地存储在连续存储空间中,每一个元素唯一的索引值;使用常数作为向量长度 b. 线性表中任意元素的存储位置:Loc(ki) = Loc(k0) + i * L (设每个元素需占用L 个存储单元) c. 线性表的优缺点: 优点:逻辑结构与存储结构一致;属于随机存取方式,即查找每个元素所花时间基本一样 缺点:空间难以扩充 d.检索:ASL=【Ο(1)】 e .插入:插入前检查是否满了,插入时插入处后的表需要复制【Ο(n )】 f.删除:删除前检查是否是空的,删除时直接覆盖就行了【Ο(n )】 4.链表 4.1单链表 a.特点:逻辑顺序与物理顺序有可能不一致;属于顺序存取的存储结构,即存取每个数据元素所花费的时间不相等 b.带头结点的怎么判定空表:head 和tail 指向单链表的头结点 c.链表的插入(q->next=p->next; p->next=q;)【Ο(n )】 d.链表的删除(q=p->next; p->next = q->next; delete q;)【Ο(n )】 e.不足:next 仅指向后继,不能有效找到前驱 4.2双链表 a.增加前驱指针,弥补单链表的不足 b.带头结点的怎么判定空表:head 和tail 指向单链表的头结点 c.插入:(q->next = p->next; q->prev = p; p->next = q; q->next->prev = q;) d.删除:(p->prev->next = p->next; p->next->prev = p->prev; p->prev = p->next = NULL; delete p;) 4.3顺序表和链表的比较 4.3.1主要优点 a.顺序表的主要优点 没用使用指针,不用花费附加开销;线性表元素的读访问非常简洁便利 b.链表的主要优点 无需事先了解线性表的长度;允许线性表的长度有很大变化;能够适应经常插入删除内部元素的情况 4.3.2应用场合的选择 a.不宜使用顺序表的场合 经常插入删除时,不宜使用顺序表;线性表的最大长度也是一个重要因素 b.不宜使用链表的场合 当不经常插入删除时,不应选择链表;当指针的存储开销与整个结点内容所占空间相 比其比例较大时,应该慎重选择 第三章 栈与队列 1.栈 a.栈是一种限定仅在一端进行插入和删除操作的线性表;其特点后进先出;插入:入栈(压栈);删除:出栈(退栈);插入、删除一端被称为栈顶(浮动),另一端称为栈底(固定);实现分为顺序栈和链式栈两种 b.应用: 1)数制转换 while (N) { N%8入栈; N=N/8;} while (栈非空){ 出栈; 输出;} 2)括号匹配检验 不匹配情况:各类括号数量不同;嵌套关系不正确 算法: 逐一处理表达式中的每个字符ch : ch=非括号:不做任何处理 ch=左括号:入栈 ch=右括号:if (栈空) return false else { 出栈,检查匹配情况, if (不匹配) return false } 如果结束后,栈非空,返回false 3)表达式求值 3.1中缀表达式: 计算规则:先括号内,再括号外;同层按照优先级,即先乘*、除/,后加+、减-;相同优先级依据结合律,左结合律即为先左后右 3.2后缀表达式: <表达式> ::= <项><项> + | <项> <项>-|<项> <项> ::= <因子><因子> * |<因子><因子>/|<因子> <因子> ::= <常数> ? <常数> ::= <数字>|<数字><常数> <数字> ∷= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 3.3中缀表达式转换为后缀表达式 InfixExp 为中缀表达式,PostfixExp 为后缀表达式 初始化操作数栈OP ,运算符栈OPND ;OPND.push('#'); 读取InfixExp 表达式的一项 操作数:直接输出到PostfixExp 中; 操作符: 当‘(’:入OPND; 当‘)’:OPND 此时若空,则出错;OPND 若非空,栈中元 素依次弹出,输入PostfixExpz 中,直到遇到‘(’为止;若 为‘(’,弹出即可 当‘四则运算符’:循环(当栈非空且栈顶不是‘(’&& 当前运算符优先级>栈顶运算符优先级),反复弹出栈顶运 算符并输入到PostfixExp 中,再将当前运算符压入栈 3.4后缀表达式求值 初始化操作数栈OP ; while (表达式没有处理完) { item = 读取表达式一项; 操作数:入栈OP ; 运算符:退出两个操作数, 计算,并将结果入栈} c.递归使用的场合:定义是递归的;数据结构是递归的;解决问题的方法是递归的 2.队列 a.若线性表的插入操作在一端进行,删除操作在另一端进行,则称此线性表为队列 b.循环队列判断队满对空: 队空:front==rear ;队满:(rear+1)%n==front 第五章 二叉树 1.概念 a. 一个结点的子树的个数称为度数 b.二叉树的高度定义为二叉树中层数最大的叶结点的层数加1 c.二叉树的深度定义为二叉树中层数最大的叶结点的层数 d.如果一棵二叉树的任何结点,或者是树叶,或者恰有两棵非空子树,则此二叉树称作满二叉树 e.如果一颗二叉树最多只有最下面的两层结点度数可以小于2;最下面一层的结点都集中在该层最左边的位置上,则称此二叉树为完全二叉树 f.当二叉树里出现空的子树时,就增加新的、特殊的结点——空树叶组成扩充二叉树,扩充二叉树是满二叉树 外部路径长度E :从扩充的二叉树的根到每个外部结点(新增的空树叶)的路径长度之和 内部路径长度I :扩充的二叉树中从根到每个内部结点(原来二叉树结点)的路径长度之和 2.性质 a. 二叉树的第i 层(根为第0层,i ≥0)最多有2^i 个结点 b. 深度为k 的二叉树至多有2k+1-1个结点 c. 任何一颗二叉树,度为0的结点比度为2的结点多一个。n0 = n2 + 1 d. 满二叉树定理:非空满二叉树树叶数等于其分支结点数加1 e. 满二叉树定理推论:一个非空二叉树的空子树(指针)数目等于其结点数加1 f. 有n 个结点(n>0)的完全二叉树的高度为?log2(n+1)?,深度为?log2(n+1)?? g. 对于具有n 个结点的完全二叉树,结点按层次由左到右编号,则有: 1) 如果i = 0为根结点;如果i>0,其父结点编号是 (i-1)/2 2) 当2i+1 一、选择(2’×15=30’) 1.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时 间复杂度为( ) A.O(0) B.O(1) C.O(n) D.O(n2) 2.用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾 结点,则在进行删除操作时( ) A.仅修改队头指针 B.仅修改队尾指针 C.队头、队尾指针都不修改 D.队头、队尾指针都可能要修改 3.设栈S和队列Q的初始状态均为空,元素a,b,c,d,e,f,g依次进入栈S,若每个元素出栈 后立即进入队列Q,且7个元素出队的顺序是b,d,c,f,e,a,g,则栈S的容量至少是( ) A.1 B.2 C.3 D.4 4.对n(n≥2)个权值均不相同的字符构成哈夫曼树,关于该树的叙述中,错误的是( ) A.该树一定是一棵完全二叉树 B.树中一定没有度为1的结点 C.树中两个权值最小的结点一定是兄弟结点 D.树中任一非叶结点的权值一定不小于下一层任一结点的权值 5.一棵二叉树的前序遍历序列为ABCDEFG,它的中序遍历序列可能是( ) A.CABDEFG B.ABCDEFG C.DACEFBG D.ADCFEG 6.下列线索二叉树中(用虚线表示线索),符合后序线索二叉树定义的是( D) 7.下面关于二分查找的叙述正确的是( ) A.表必须有序,表可以顺序方式存储,也可以链表方式存储 B.表必须有序,且表中数据必须是整型,实型或字符型 C.表必须有序,而且只能从小到大排列 D.表必须有序,且表只能以顺序方式存储 8.下列排序算法中,在每一趟都能选出一个元素放到其最终位置上,并且其时间性能受 数据初始特性影响的是( ) A.直接插入排序 B.快速排序 C.直接选择排序 D.堆排序 9.下列关于无向连通图特性的叙述中,正确的是( ) I.所有顶点的度之和为偶数 II.边数大于顶点个数减1 2017年数据结构期末考试题及答案 一、选择题(共计50分,每题2分,共25题) 1 ?在数据结构中,从逻辑上可以把数据结构分为 C 。 A. 动态结构和静态结构B?紧凑结构和非紧凑结构 C.线性结构和非线性结构 D .内部结构和外部结构 2?数据结构在计算机内存中的表示是指 A ° A. 数据的存储结构 B.数据结构 C.数据的逻辑结构 D .数据元 素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的 A 结构。 A. 逻辑B?存储 C.逻辑和存储 D.物理 4 .在存储数据时,通常不仅要存储各数据元素的值,而且还要存储 C ° A.数据的处理方法B?数据元素的类型 C.数据元素之间的关系 D.数据的存储方法 5. 在决定选取何种存储结构时,一般不考虑 A ° A.各结点的值如何B?结点个数的多少 C?对数据有哪些运算 D.所用的编程语言实现这种结构是否方便。 6. 以下说法正确的是D ° A. 数据项是数据的基本单位 B. 数据元素是数据的最小单位 C. 数据结构是带结构的数据项的集合 D. —些表面上很不相同的数据可以有相同的逻辑结构 7. 在以下的叙述中,正确的是B ° A. 线性表的顺序存储结构优于链表存储结构 B. 二维数组是其数据元素为线性表的线性表 C?栈的操作方式是先进先出 D.队列的操作方式是先进后出 8. 通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着 A. 数据元素具有同一特点 B. 不仅数据元素所包含的数据项的个数要相同,而且对应的数据项的类型要一致 C. 每个数据元素都一样 D. 数据元素所包含的数据项的个数要相等 9 ?链表不具备的特点是 A 。 A.可随机访问任一结点 B.插入删除不需要移动元素 C?不必事先估计存储空间 D.所需空间与其长度成正比 10. 若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一 个结点,则采用 D 存储方式最节省运算时间。 A.单链表B ?给出表头指针的单循环链表 C.双链表D ?带头结点 的双循环链表 11. 需要分配较大空间,插入和删除不需要移动元素的线性表,其存储结构是 B 。 A.单链表B .静态链表 C.线性链表 D .顺序存储结构 12 .非空的循环单链表head的尾结点(由p所指向)满足C 。 A. p—>next 一NULL B. p — NULL C. p—>next == head D. p = = head 13 .在循环双链表的p所指的结点之前插入s所指结点的操作是 D 。 A .p—> prior-> prior=s B .p—> prior-> n ext=s C.s —> prior—> n ext = s D.s —> prior—> prior = s 14 .栈和队列的共同点是C 。 A.都是先进后出 B .都是先进先出 C.只允许在端点处插入和删除元素 D .没有共同点 2014 上数据结构期末复习大纲 一. 期中前以期中考试试卷复习,算法要真正理解 二、二叉树、图、排序算法将是考试重点(占60%左右) 三、要掌握的算法 1. 二叉树的链表表示 2.建立二叉树的链表存储结构 3. 先序、中序、后序遍历二叉树(递归算法) 4. 遍历算法的应用(如求二叉树的结点数) 5.建立huffman树和huffman编码 6. 图的邻接矩阵表示和邻接链表表示 7.图的深度优先遍历和广度优先遍历算法 8. 有向图求最短路径(迪杰斯特拉算法) 9. 直接插入排序算法 10. shell 排序(排序过程) 12. 堆排序(排序过程) 练习题 1. 有8个结点的无向图最多有 B 条边。 A .14 B. 28 C. 56 D. 112 2. 有8个结点的无向连通图最少有 C 条边。 A .5 B. 6 C. 7 D. 8 3. 有8个结点的有向完全图最多有 C 条边。 A .14 B. 28 C. 56 D. 112 4. 用邻接表表示图进行广度优先遍历时,通常是采用 B 来实现算法的。 A .栈 B. 队列 C. 树 D. 图 5. 用邻接表表示图进行深度优先遍历时,通常是采用 A 来实现算法的。 A .栈 B. 队列 C. 树 D. 图 6. 已知图的邻接矩阵,根据算法思想,则从顶点0出发按深度优先遍历的结点序列是*( C ) A .0 2 4 3 1 5 6 B. 0 1 3 6 5 4 2 C. 0 4 2 3 1 6 5 ??? ? ?? ? ? ? ? ? ???????????0100011101100001011010110011001000110010011011110 1.什么是最小生成树?简述最小生成树的Prime算法的思想。 答:最小生成树就是构造一棵生成树,使得树上各边的代价之和最小。 普里姆算法(Prim)的基本思想: 从连通网络N = { V, E }中的某一顶点u0 出发,选择与它关联的具有最小权值的边(u0, v),将其顶点加入到生成树的顶点集合U中。以后每一步从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边(u, v),把它的顶点加入到集合U中。如此继续下去,直到网络中的所有顶点都加入到生成树顶点集合U中为止。 2.简述AOV网络中为何不能出现回路,如何判断AOV网络是否有回路? 答:在AOV网络中,如果活动vi必须在vj之前进行,则称为存在有向边;在AOV网络中不能出现有向回路,如果出现了,则意味着某项活动应以自己作为先决条件。 如何检查AOV网是否存在有向环: 检测有向环的一种方法是对AOV网络构造它的拓扑有序序列。即将各个顶点(代表各个活动)排列成一个线性有序的序列,使得AOV网络中所有应存在的前驱和后继关系都能得到满足。(1)这种构造AOV网络全部顶点的拓扑有序序列的运算就叫做拓扑排序。 (2)如果通过拓扑排序能将AOV网络的所有顶点都排入一个拓扑有序的序列中,则该AOV 网络中必定不会出现有向环;相反,如果得不到满足要求的拓扑有序序列,则说明AOV网络中存在有向环,此AOV网络所代表的工程是不可行的。 3.为何需要采用循环队列?n个空间的循环队列,最多存储多少个元素?为什 么? 答:循环队列以克服顺序队列的"假上溢"现象,能够使存储队列的向量空间得到充分的利用,所以采用循环队列。 n个空间的循环队列,最多存储n-1个元素,那是为了区别循环队列的队空和队满的条件。队空的条件是Q.front==Q.rear,而队满的条件是(Q.rear+1)%N==Q.front(N是数组中单元的总数),因此,Q.rear所指向的数组单元处于未用状态。所以说,N个单元的数组所存放的循环队列最大长度是N-1。 4.简述堆的删除算法,其删除的是那个值? 答:堆的删除算法:首先,移除根节点的元素(并把根节点作为当前结点)比较当前结点的两个孩子结点的元素大小,把较大的那个元素移给当前结点,接着把被移除元素的孩子结点作为当前结点,并再比较当前结点的孩子的大小,以此循环,直到最后一个叶子结点的值大于或等于当前结点的孩子结点或孩子结点的位置超过了树中元素的个数,则退出循环。最后把最后叶子结点的元素移给当前结点。 在堆的算法里面,删除的值为根值。 5.线索二叉树中,什么是线索,它是否唯一?可有根据什么顺序得到? 安徽大学2014-2015学年第一学期《数据结构》期末考试试卷(A卷) (含参考答案) 一、单项选择题(本大题共15小题,第小题2分,共30分)在每小题列出的四个选项中只有一 个符合题目要求,请将其代码填在题后的括号内。错选或未选均无分。 1. 算法必须具备输入、输出和[ C ] A. 计算方法 B. 排序方法 C.解决问题的有限运算步骤 D. 程序设计方法 2. 有n个节点的顺序表中,算法的时间复杂度是O(1)的操作是[ A ] A.访问第i个节点(1≤i≤n) B.在第i个节点后插入一个新节点(1≤i≤n) C.删除第i个节点(1≤i≤n) D.将n个节点从小到大排序 3.单链表的存储密度[ C] A.大于1 B. 等于1 C.小于1 D. 不能确定 4. 循环队列SQ的存储空间是数组d[m],队头、队尾指针分别是front和rear,则执行出队后其头指针front值是[ D ] A.front=front+1 B. front=(front+1)%(m-1) C. front=(front-1)%m D. front=(front+1)%m 5. 在一个具有n个结点的有序单链表中插入一个新结点并仍然保持有序的时间复杂度是 [ B ] A. O(1) B. O(n) C. O(n2) D. O(nlogn) 6 设二维数组A[0..m-1][0..n-1]按行优先顺序存储,则元素A[i][j]的地址为 [ B ] A.LOC(A[0][0])+(i*m+j) B.LOC(A[0][0])+(i*n+j) C.LOC(A[0][0])+[(i-1)*n+j-1] D. LOC(A[0][0])+[(i-1)*m+j-1] 7.设将整数1,2,3,4,5依次进栈,最后都出栈,出栈可以在任何时刻(只要栈不空)进行,则出栈序列不可能是[ B] A.23415 B. 54132 C.23145 D. 15432 第二章算法分析 1.算法分析是计算机科学的基础 2.增长函数表示问题(n)大小与我们希望最优化的值之间的关系。该函数表示了该算法的时间复杂度或空间复杂度。增长函数表示与该问题大小相对应的时间或空间的使用 3.渐进复杂度:随着n的增加时增长函数的一般性质,这一特性基于该表达式的主项,即n 增加时表达式中增长最快的那一项。 4.渐进复杂度称为算法的阶次,算法的阶次是忽略该算法的增长函数中的常量和其他次要项,只保留主项而得出来的。算法的阶次为增长函数提供了一个上界。 5.渐进复杂度:增长函数的界限,由增长函数的主项确定的。渐进复杂度类似的函数,归为相同类型的函数。 6.只有可运行的语句才会增加时间复杂度。 7. O() 或者大O记法:与问题大小无关、执行时间恒定的增长函数称为具有O(1)的复杂度。 增长函数阶次 t(n)=17 O(1) t(n)=3log n O(log n) t(n)=20n-4 O(n) t(n)=12n log n + 100n O(n log n) t(n)=3n2+ 5n - 2 O(n2) t(n)=8n3+ 3n2O(n3) t(n)=2n+ 18n2+3n O(2n) 8.所有具有相同阶次的算法,从运行效率的角度来说都是等价的。 9.如果算法的运行效率低,从长远来说,使用更快的处理器也无济于事。 10.要分析循环运行,首先要确定该循环体的阶次n,然后用该循环要运行的次数乘以它。(n 表示的是问题的大小) 11.分析嵌套循环的复杂度时,必须将内层和外层循环都考虑进来。 12.方法调用的复杂度分析: 如:public void printsum(int count){ int sum = 0 ; for (int I = 1 ; I < count ; I++) sum += I ; System.out.println(sun); } printsum方法的复杂度为O(n),计算调用该方法的初始循环的时间复杂度,只需把printsum方法的复杂度乘以该循环运行的次数即可。所以调用上面实现的printsum方法的复 杂度为O(n2)。 13指数函数增长> 幂函数增长> 对数函数增长 第1章概论 1. 数据结构是一门研究非数值计算的程序设计问题中,数据元素的①C、数据信息在计算机中的②A以及一组相关的运算等的课程。 ①A.操作对象B.计算方法C.逻辑结构D.数据映象 ②A.存储结构B.关系C.运算D.算法 2. 计算机算法指的是① C ,它必具备输入、输出和② B 等五个特性。 ① A. 计算方法 B. 排序方法 C. 解决问题的有限运算序列 D. 调度方法 ② A. 可行性、可移植性和可扩充性 B. 可行性、确定性和有穷性 C. 确定性、有穷性和稳定性 D. 易读性、稳定性和安全性 3.下面程序段的时间复杂度是D for(i=0;i 2011-2012学年第一学期期末考查 《数据结构》试卷 (答案一律写在答题纸上,在本试卷上做答无效) 一、选择(每题1分,共10分) 1.长度为n的线性表采用顺序存储结构,一个在其第i个位置插入新元素的算法时间复杂度为(D) A.O(0) B.O(1) C.O(n) D.O(n2) 2.六个元素按照6,5,4,3,2,1的顺序入栈,下列哪一个是合法的出栈序列?(D) A.543612 B.453126 C.346512 D.234156 3.设树的度为4,其中度为1、2、3、4的结点个数分别是4、2、1、2,则树中叶子个数为(B ) A.8 B.9 C.10 D.11 4.设森林F对应的二叉树B有m个结点,B的右子树结点个数为n,森林F中第一棵树的结点个数是( B ) A. m-n B.m-n-1 C.n+1 D.m+n 5.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是(B) A.9 B.11 C.15 D.不确定 6.下列哪一个方法可以判断出一个有向图是否有环。(A) A.深度优先遍历 B.拓扑排序 C.求最短路径 D.求关键路径 7.第7层有10个叶子结点的完全二叉树不可能有(B )个结点。 A.73 B.234 C.235 D.236 8.分别用以下序列构造二叉排序树,与用其他三个序列构造的结果不同的是(B) A.(100,80,90,60,120,110,130) B.(100, 120, 110,130,80, 60,90) C.(100,60,80,90,120,110,130) D.(100,80, 60,90, 120, 130,110) 9.对一组数据(84,47,25,15,21)排序,数据的排列次序在排序过程中变化如下:(1)84 47 25 15 21 (2)15 47 25 84 21 (3)15 21 25 84 47(4)15 21 25 47 84则采用的排序方法是(B ) A.选择排序 B.起泡排序 C.快速排序 D.插入排序 10.对线性表进行折半查找时,要求线性表必须(D) A.以顺序方式存储 B.以顺序方式存储,且数据元素有序 1.如下为二分查找的非递归算法,试将其填写完整。 Int Binsch(ElemType A[ ],int n,KeyType K) { int low=0; int high=n-1; while (low<=high) { int mid=_______________________________; if (K==A[mid].key) return mid; //查找成功,返回元素的下标 else if (Kx) return 1; else return 0; } (1)指出该算法的功能; (2)该算法的时间复杂度是多少? 2.(1) 判断n是否是素数(或质数) n (2)O() 3.已知一个图的顶点集V和边集E分别为:V={1,2,3,4,5,6,7}; E={(1,2)3,(1,3)5,(1,4)8,(2,5)10,(2,3)6,(3,4)15,(3,5)12,(3,6)9,(4,6)4,(4,7)20,(5,6)18,(6, 7)25}. 用克鲁斯卡尔(Kruskal)算法和prim算法得到最小生成树,试写出在最小生成树中依次得到的各条边。 3.用克鲁斯卡尔算法得到的最小生成树为: (1,2)3, (4,6)4, (1,3)5, (1,4)8, (2,5)10, (4,7)20 4.LinkList mynote(LinkList L) 数据结构与算法分析-六套期末复习题(含答案) 试题一 一、单项选择题(每小题2分,共20分) (1)以下数据结构中哪一个是线性结构?() A)有向图B)队列C)线索二叉树D)B树 (2)在一个单链表HL中,若要在当前由指针p指向的结点后面插入一个由q指向的结点,则执行如下()语句序列。 A)p=q; p->next=q; B)p->next=q; q->next=p; C)p->next=q->next; p=q; D)q->next=p->next; p->next=q; (3)()不是队列的基本运算。 A)在队列第i个元素之后插入一个元素 B)从队头删除一个元素 C)判断一个队列是否为空D)读取队头元素的值 (4)字符A、B、C依次进入一个栈,按出栈的先后顺序组成不同的字符串,至多可以组成()个不同的字符串。 A)14 B)5 C)6 D)8 (5)由权值分别为3,8,6,2的叶子生成一棵哈夫曼树,它的带权路径长度为()。 A)11 B)35 C)19 D)53 以下6-8题基于下图: (6)该二叉树结点的前序遍历的序列为()。 A)E、G、F、A、C、D、B B)E、A、G、C、F、B、D C)E、A、C、B、D、G、F D)E、G、A、C、D、F、B (7)该二叉树结点的中序遍历的序列为()。 A)A、B、C、D、E、G、F B)E、A、G、C、F、B、D C)E、A、C、B、D、G、F D)B、D、C、A、F、G、E (8)该二叉树的按层遍历的序列为()。 A)E、G、F、A、C、D、B B)E、A、C、B、D、G、F C)E、A、G、C、F、B、D D)E、G、A、C、D、F、B (9)下面关于图的存储的叙述中正确的是()。 A)用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关B)用邻接表法存储图,占用的存储空间大小与图中边数和结点个数都有关 C)用邻接矩阵法存储图,占用的存储空间大小与图中结点个数和边数都有关 D)用邻接矩阵法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关 (10)设有关键码序列(q,g,m,z,a,n,p,x,h),下面哪一个序列是从上述序列出发建堆的结果?() A)a,g,h,m,n,p,q,x,z B)a,g,m,h,q,n,p,x,z C)g,m,q,a,n,p,x,h,z D)h,g,m,p,a,n,q,x,z 二、(本题8分) 对于序列{8,18,6,16,29,28},试写出堆顶元素最小的初始堆。 三、(本题8分) 一棵二叉树的先序、中序和后序序列分别如下,其中有一部分未显示出来。试求出空格处的内容,并画出该二叉树。 先序序列: B F ICEH G 中序序列:D KFIA EJC 后序序列:K FBHJ G A 四、(每小题2分,共8分) 设有序列:w={23,24,27,80,28},试给出: (1)二叉排序树; (2)哈夫曼树; (3)平衡二叉树;大学数据结构期末知识点重点总结(考试专用)
大连理工大学软件学院2014数据结构期末考试)
2017年数据结构期末考试题及答案A
上数据结构期末图习题答案
数据结构 期末考试复习题及答案
安徽大学2014数据结构期末考试试卷(A卷)
数据结构复习资料,java数据结构期末考试
数据结构 习题答案
《数据结构》期末考试题及答案
北方工业大学数据结构期末复习题
数据结构与算法分析-六套期末复习题(含答案)