数据结构(本)期末综合练习(2013年6月)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构(本)期末综合练习
2013年6月
期末综合练习一
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.0 B.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<n<40的完全二叉树,最后一层有4个结点,则该树有()个叶结点A.18 B.17 C.36 D.35
24.一棵完全二叉树共有4层,且第4层上有2个结点,该树共有()个非叶子结点(根为第一层)。
A.5 B.4 C.3 D.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,87 B. 50,30,48,56,66,89,94,87,100 C.48,30,50,56,66,89,94,87,100 D.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个数据元素中找值最大的元素,其基本操作为_元素间的比较_。
算法的时间复杂度为_ O(n)__ 。
4. 求两个n阶矩阵的乘积,算法的基本操作为_乘法__,时间复杂度为_O(n3)__。
5.设有一个长度为25的顺序表,第8号元素到第25号元素依次存放的值为 8,9,10,11,…,25,某人想要删除第8个元素,他的做法是从第25号元素开始,直到第9号元素依次向前移动1个位置,其结果新表中第9号元素的值为(25)。
6.设有一个长度为25的顺序表,第8号元素到第25号元素依次存放的值为8,9,10,11,…25, 某人想要在第8个元素前插入1个元素7(也就是插入元素作为新表的第8个元素),他的做法是从第8号元素开始,直到第25号元素依次向后移动1个位置,然后把7存放在
8号位置,其结果是新表中第25号元素的值为( 8 )。
7.在双向链表中,要在p所指的结后插入q所指的结点(设q所指的结点已赋值),可以先用语句q->next=p->next; (p->next)->prior=q;
然后再用语句q->prior=p;和语句__ p->next=q;__。
8.在双向链表中,要在p所指的结后插入q所指的结点(设q所指的结点已赋值),其中所用的一条语句(p->next)->prior=q;的功能是使P所指结点的__直接前驱的左指针_____指向q 。
9.在一个单向链表中,要删除p所指结点的直接后继结点。
则可以用操作_ p->next=p->next->next;_______。
(用一条语句)
10.设有一个带头结点的,头指针为head的单向链表,p指向表中某一个结点,且有p->next= =NULL,现要删除头结点,并使该单向链表构造成单向循环链表,通过
操作head=head->next; _ p->next= head;_______。
11.向一个栈顶指针为top的链栈中插入一个p所指结点时,可执行__ p->next=top; top=p;操作。
( 填两条语句, 结点的指针域为next)
12.从一个栈顶指针为top的链栈中删除一个结点时,用d保存被删结点的值,可执行_ d=top->data;top=top->next;_______。
(结点的指针域为next,数据域为data)
13.在一个带头结点的链队中,设front和rear分别为队头和队尾指针,则删除一个结点的操作为p=front->next;_ front->next______=p->next;(结点的指针域为next, p为辅助用指针)
14.循环链队列中,设front和rear分别为队头和队尾指针,(最多元素为MaxSize,采用少用一个元素的模式),判断循环链队列为满的条件为_ front= =(rear+1)% MaxSize_______ 。
15.设有n阶对称矩阵A,用一维数组s压缩存储A的下三角元素,s的下标从零开始,最后一个元素的下标为27,则n=__ 7___。
(矩阵中的第1个元素是a1,1)
16.对稀疏矩阵进行压缩存储,可采用三元组表,一个6行7列的稀疏矩阵A相应的三元组表共有8个元素,则矩阵A共有__ 34__个零元素。
17. 一棵3度的树,其中3度结1个,2度结2个,1度结2个,则该树共有_ 5___个
叶结点。
18.一棵有8个权重值构造的哈夫曼数,共有15 个结点。
19.一棵有7个叶结点的二叉树,其1度结点数的个数为2,则该树共有15___个结点20.一棵有18个结点的二叉树,其2度结点数的个数为8,则该树共有___ 1__个1度结点21.如图3所示的二叉树,其中序遍历序列为__ 512389746_______。
图3
22.如图4
图4
23.二叉排序树或者是一棵空树,或者是一棵具有下列性质的二叉排:若它的左子树非空,则左子树的所有结点的值都小于它的根结点的值;若它的右子树非空,则右子的所有结点的值都大于(若允许结点有相同的值,则大于等于)它的根结点的值。
这种说法是_不正确_______的。
(回答正确或不正确) 24.在查找表中,通过记录的某关键字能唯一地确定一个记录,该关键字称为__主关键字___。
三、综合题 1.
(1) 以3,4,5,8,9,10作为叶结点的权,构造一棵哈夫曼树。
(2) 给出相应权重值叶结点的哈夫曼编码。
(3) 一棵哈夫曼树有2n-1个结点,它是共有多少个权重值构造而成的?简述理由? 1.(1)
图7
(2)
3 0000
4 0001
5 001
10 01
8 10
9 11
(3)n个,因为非叶结点数比叶结点数少一个,而权值个数=叶结点数
2.(1)对给定权值3,1 ,4,4,5,6,构造深度为5的哈夫曼树。
(设根为第1层)
(2) 求树的带权路径长度。
(3)存储上述哈夫曼树,结点中共有多少个指针域为空,说明理由.
2. (1)
图8
(2) WPL=3*4+1*4+4*3+6*2+4*2+5*2=58
(3) 共11个结点,22个指针域,除根结点外,每个结点对应一个指针域.,共10个指针域非空,故
有22-10=12个空指针域,
3.(1)简述拓扑排序的步骤。
(2)说明有向图的拓扑序列不一定是唯一的原因。
(3)如何利用拓扑排序算法判定图是否存在回路。
(4)设有向图G如下,写出首先删除顶点1的3种拓扑序列。
图5
3. (1) 循环执行以下两步
选择一个度为0的顶点并输出
从网中删除此结点及所有出边
(2)因为选择一个度为0的顶点时不一定是唯一的
(3)由顶点活动网构造拓扑序列的过程中,输出结点后,余下的结点均有前驱
(4) 152364 152634 156234
4. (1) 如下的一棵树,给出先序遍历序列
(2) 把1,2,3,4,5,6,7,8,9填人,使它成为一棵二叉排序树
提示:设图中的树是二叉排序树,找出中序遍历序列与1,2,…9的对应关系(3) 请在该树中再插入一个结点3.5作为叶结点,并使它仍然是一棵二叉排序树。
图6
4 .
(1) A1 A2 A4 A7 A8 A5 A9 A3 A6
(2)
(3)
图9
5.设有序表为(21,22
,23,24,25,26,27,28,29,30,31,32),元素的下标从 0开始。
(1)说出有哪几个元素需要经过4次元素间的比较才能成功查到。
(2)画出对上述有序表进行折半查找所对应的判定树(树结点用数值表示) (3)设查找元素为5,需要进行多少次元素间的比较才能确定不能查到。
(4)求在等概率条件下,成功查找的平均比较次数? 5.
(1) 5
(2)
图10 (3) 3
(4) ASL=(1+2*2+3*4+5*4)/12=37/12
6.设查找表为(5,6,7,8,9,10,11,12,13,14)
(1)画出对上述有序表进行折半查找所对应的判定树(要求以数据元素作为树结点) (2) 给出二叉排序树的定义,针对上述折半查找所对应的判定树的构造过程,说明判定树 是否是二叉排序树(设树中没有相同结点)?
(3) 为了查找元素5.5,经过多少次元素间的比较才能确定不能查到?
6.(1)
图10
(2) 二叉排序树或者是一棵空树,或者是一棵具有下列性质的二叉排:若它的左子树
非空,则左子树的所有结点的值都小于它的根结点的值;若它的右子树非空,则右子树的所有结点的值都大于(若允许结点有相同的值,则大于等于)它的根结点的值;
左,右子树也是一棵二叉排序树,按定义判定树是二叉排序树。
(3) 3次
四、程序填空题
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<j)
{ while(i<j && a[j].key>mid.key)
j- -;
if(i<j)
{ a[i]=a[j];
__(1) i++; ___;
}
while(i<j && a[i].key<=mid.key)
__(2) i ++;___;
if(i<j)
{ __(3) a[j]=a[i]; __
__(4)_ j--;__
}
}
a[i]=mid;
quicksort (a,stat, i-1);
quicksort __(5) (a, i+1,end);___
}
2.以下函数为直接选择排序算法,对a[1],a[2],…a[n]中的记录进行直接选择排序,完成程序中的空格
typedef struct
{ int key;
……
}NODE;
void selsort(NODE a[],int n)
{
int i,j,k;
NODE temp;
for(i=1;i<= ___(1)_ n-1____;i++)
{
k=i;
for(j=i+1;j<= ___(2)_ n ____;j++)
if(a[j].key<a[k].key) __(3)__ k=j ____;
if(i!=k)
{
temp=a[i];
___(4)_ a[i]=a[k]____;
____(5)_ a[k]=temp ___;
}
}
}
3.以下函数为链队列的入队操作,x为要入队的结点的数据域的值,front、rear分别是链队列的队头、队尾指针
struct node
{ ElemType data;
struct node *next;
};
struct node *front,*rear;
void InQueue(ElemType x)
{
struct node *p;
p= (struct node*) ___(1)_ malloc(sizeof (struct node))____;
p->data=x;
p->next=NULL;
___(2)_ rear->next=p ____;
rear= ___(3)_ p ____;
}
4 .设有一个头指针为head的不带头结点单向链表, 且p、q是指向链表中结点类型的指针
变量,p指向链表中某结点a(设链表中没有结点的数据域与结点a的数据域相同), 写出相关语句
(1).使该单向链表成为单向循环链表
(2) 删去a结点
q=p; x=p->data;
while (q->next!=NULL)q=q->next;
(1)__(1)_ q->next=head;__
q=p; p=p->next;
while(p->data!=x)
{ q=p;
(1)__(2)_ p=p->next;__
}
__(3) q->next=p->next;___
期末综合练习二
一、单项选择题
1. 数据结构在计算机存中的表示是指 ( ) 。
A.数据元素之间的关系B.数据的存储结构
C.数据元素的类型 D.数据的逻辑结构
2 .结构中的元素之间存在一对多的关系是()。
A.集合 B.线性结构
C.树形结构 D.图状结构
3 . 结构中的元素之间存在多对多的关系是()。
A.集合 B.线性结构
C.树形结构 D.图状结构
4.对不带头结点的单向链表,判断是否为空的条件是()(设头指针为head)。
A.head==NULL B.head->next= =NULL
C.head->next= =head D.head =NULL
5 . 设有一个长度为20的顺序表,要在第5个元素之前插入1个元素(也就是插入元素作为
新表的第5个元素),则移动元素个数为()。
A.15 B.16 C. 5 D.4
6. 在一个不带头结点的单循环链表中,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;
7.在一个尾指针为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; 8.一个栈的进栈序列是1,2,3,4,5,则栈的不可能输出序列是()(进栈出栈可以交替进行)。
A.12345 B.43512 C.45321 D.54321
9.元素a,b,c,d按顺序依次进栈,则该栈的可能输出序列是()(进栈出栈可以交替进行)。
A.c,a,b,d B.d,b,c,a
C.a,c,b,d D.d,c,a,b
10.一个队列的入队序列是2,4,6,8,按该队列的输出序列使各元素依次入栈,该栈的可能输出序列是()。
A.8,6,4,2 B.6,2,4,8
C.8,4,2,6 D.8,2,4,6
11.从一个栈顶指针为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;
12.在一个链队中,假设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;
13.设有一个对称矩阵A,采用压缩存储的方式,将其下三角部分以行序为主序存储到一维数组B中(数组下标从1开始),B数组共有55个元素,则该矩阵是()阶的对称矩阵。
(矩阵中的第1个元素是a1,1)
A.5 B.20 C.10 D.15
14.设有一个25阶的对称矩阵A,采用压缩存储的方式,将其下三角部分以行序为主序存储
到一维数组B中(数组下标从1开始),则矩阵中元素.a7,6在一维数组B中的下标是()。
(矩阵中的第1个元素是a1,1)
A.34 B.14 C.26 D.27
15.设有一个18阶的对称矩阵A,采用压缩存储的方式,将其下三角部分以行序为主序存储到一维数组B中(数组下标从1开始),则数组中第53号元素对应于矩阵中的元素是()。
(矩阵中的第1个元素是a1,1)
A.a8,5 ,B.a10,8 C.a8,1, D.a7,6
16.以下程序段的结果是 c的值为()。
char a[8]= “1236789”, int *p=a, int c=0;
while(*p++)c++;
A.8,B.7 C.10 D.12
17 .以下程序段的结果是 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
18.一棵有23个结点,采用链式存储的二叉树中,共有()个指针域为空。
A.24 B.25 C.23 D.45
19.一棵采用链式存储的二叉树中,共有n个指针域被有效使用(即指针域为非空)。
该二叉树有()个结点。
A.n+1 B.n C.n-1 D.n-2
20.在一棵二叉树中,若编号为i的结点是其双亲结点的左孩子,则双亲结点的顺序编号为()。
A.i/2 B.2i-1 C.2i+1 D.i/2 -1
21.在一棵二叉树中,若编号为i的结点是其双亲结点的右孩子,则双亲结点的顺序编号为()。
A.i/2.0 B.i/2+1 C.2i+1 D.i/2向下取整
22.设一棵哈夫曼树共有2n+1个叶结点,则该树有()个叶结点。
A.n-1 B.n C.n+1 D.2n
23.设一棵采用链式存储的二叉树,除叶结点外每个结点度数都为2,该树结点中共有2n个指针域为空。
则该树有()个叶结点。
A.2n B.2n+1 C.2n+2 D.n
24.已知如图1所示的一个图,若从顶点a出发,按深度优先搜索法进行遍历,则可能得到的一种顶点序列为()。
A.abecdf B.acfebd C.aebcfd D.aedbfc
图1
25.已知如图2所示的一个图,若从顶点a出发,按广度优先搜索法进行遍历,则可能得到的一种顶点序列为()。
A.acedfb B.aecfdb C.aecdfb D.acebfd
图2
26.已知如图3所示的一个图,若从顶点B出发,按广度优先法进行遍历,则可能得到的一种顶点序列为()。
A.BADEHCFG
B.BADEHCGF
C.BADECHFG
D.BADEHCFG
图3
27.一组记录的关键字序列为(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
28.一组记录的关键字序列为(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
29.一组记录的关键字序列为(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
30.在有序表{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个元素),则最少要移动元素的个数为(15 )。
5.设有一个长度为25的顺序表,要删除前3个元素,则最少要移动元素的个数为(22)。
6.在双向链表中,要删除p所指的结点,可以先用语句(p->prior)->next=p->next;然再用语句__(p->next)->prior=p->prior;______。
7.在双向链表中,要删除p所指的结点,其中所用的一条语句(p->prior)->next=p->next;
的功能是:使P所指结点的直接前驱的右指针指向_ P所指结点的直接后继_______。
8.在一个单向链表中p所指结点之后插入一个s所指向的结点时,应执行s->next=p->next;
和__ p->next=s;___的操作.
9.设有一个头指针为head的单向链表,p指向链表中的某结点,若要使该链表成为单向循环链表,可用语句while(p->next!= NULL) p= p->next; 和__ p->next=head;___。
10.一个栈和一个队列的输入序列都为abcdefg,它们可能有相同的输出序列吗?_ abcdefg__。
(若没有则回答没有,若有则写出序列,进栈出栈可以交替进行)。
11.向一个栈顶指针为top的链栈中插入一个p所指结点时,某人用语句top=p;p->next=top;
这样做的结果使p所指向的结点的指针域指向了_ p本身_。
12.从一个栈顶指针为top的链栈中取栈顶元素,用d保存栈顶元素的值,可执行
_ d=top->data;_。
(结点的数据域为data)
13.在一个链队中,设front和rear分别为队头和队尾指针,则s所指结点(数据域已赋值)的入队操作为s->next=NULL;._ rear->next=s;__和rear=s;
14. 循环链队列中,设front和rear分别为队头和队尾指针,(最多元素为MaxSize,),判断循环
链队列为空的条件是_ front= =rear__为真。
15.设有n阶对称矩阵A,用一维数组s压缩存储A的下三角元素,s的下标从零开始,元素s[26]相应于A中的元素为__ a7,6_____。
(矩阵中的第1个元素是a1,1)
16. 对稀疏矩阵进行压缩存储,可采用三元组表,设a是稀疏矩阵A相应的三元组表类型(结
构体类型)变量,a中的一个成员项是三元组类型的结构体数组data,按书中定义,若
a.data[0].i=2;a.data[0].j=3; a.data[0].v=16; 它提供的A数组的相关信息有_ A的第一个非
零元素的下标为2,3 ,元素为16 ______。
17.对稀疏矩阵进行压缩存储,可采用三元组表,设a是稀疏矩阵A相应的三元组表类型(结构体类型)变量,a中的一个成员项是三元组类型的结构体数组data,按书中定义,若data 的下标从零开始,最后一个元素下标为10,又a.data[10].i=8;a.data[10].j=5; a.data[10].v=36; 它提供的A矩阵的相关信息有__ A共有11个非零元素,a8,5为36_____。
18.设有一棵深度为5的完全二叉树,该树共有20个结点,第五层上有 5 个叶结点。
(根所在结点为第1层)
19.设有一棵有78个结点的完全二叉树,该树共有___ 7__层。
(根所在结点为第1层)20.中序遍历__二叉排序__树可得到一个有序序列。
21.对于一棵具有___ n__个结点的二叉树,其相应的链式存储结构中共有n+1个指针域空. 22.如图4所示的二叉树,其后序遍历序列为___ 519876432______。
图4
23.如图5所示的二叉树,其中序遍历序列为__ 5387946_______。
图5
24 .给定一组权重值,构造哈夫曼树,哈夫曼树的高度一定是唯一的,这种说法是___不正确_的。
(回答正确或不正确)
三、综合题
1.(1)已知某二叉树的后序遍历序列是debca,中序遍历序列是dbeac,试画出该二叉树。
(2)若上述二叉树的各个结点的字符分别代表不同的整数(其中没有相等的),并恰好使该树成为一棵二叉排序树,试给出a、b、c、d、e的大小关系。
(3)给出该树的前序遍历序列。
1.(1)
图8
(2)d<b<e<a<c (3)abdec
2. (1) 说明什么是顶点活动网(AOV 网)和拓扑序列 (2)设有向图G 如下,写出3种拓扑序列,
(3)在图G 中增加一条边,使图G 仅有一条拓扑序列
图6
2.
(1) 用顶点表示活动,边表示活动间先后关系的有向图称为顶点活动网
在顶点活动网中,若不存在回路,则所有活动可排列成一个线性序列,使每个活动的所 有前驱活动都排在该活动的前面,称此序列为拓扑序列 (2) abdc adbc dabc
(3) 在 b 和d 间添加有向边 3.(1)利用筛选过程把序列{42,82,67,102,16,32,57,52}建成堆(小根堆),画出相应的完全二叉树(不要求中间过程)。
(2)写出对上述堆对应的完全二叉树进行中序遍历得到的序列。
3.(1
初始树 堆
图9
(2)102,52,42,82,16,67,32,57
4.如下是一棵二叉排序树,A1,A2,…A9代表1,2,3,…9中各个不同数字,(1)给出对该树中序遍历的结果
(2)A3,A5,A7的值各为多少?
(3)请在该树中再插入一个结点9 .5作为叶结点,并使它仍然是一棵二叉排序树
图7
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,12,13,14,15,16,17,18,19,20,21) ,元素的下标从0开始。
(1)画出对上述查找表进行折半查找所对应的判定树(树中结点用数值表示)(2)说明成功查找到元素15,19各需要经过多少次比较?
(3)说明查找不到元素10,15.5各需要经过多少次比较?
(4)給出中序遍历判定树的序列。
5(1)
图11
(2) 4次2次
(3)3次4次
(4)11,12,13,14,15,16,17,18,19,20,21
6.
(1) 设有查找表{17,26,14,16,15,30,18,19,28},依次取表中数据构造一棵二叉
排序树.
(2) 对上述二叉树给出后序遍历的结果
(3). 对上述二叉树给出中后序遍历的结果
(4)) 在上述二叉树中查找元素15
6. (1)见图6
(2) 15,16,14,19,18,28,30,26,17
(3) 14,15,16,17,18,19,26,28,30
(4) 4
四、程序填空题
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)_ n __;i++)
{ a[0]=a[i];
x= a[i].key;
s=1;
j=i-1;
while (s<=j)
{ m=__(2)_ (s+j)/2;__
if( x<a[m].key)
__(3) j=m-1;___
else
__(4) s=m+1;___
}
for ( k=i-1;k>=j+1;k- -)
__(5)_ a[k+1] __=a[k];
a[j+1]=a[0];
}
}
2.以下函数是二叉排序树的查找算法,若二叉树为空,则返回根结点的指针,否则,返回值是指向树结点的结构指针p(查找成功p指向查到的树结点,不成功p指向为NULL)完成程序中的空格
typedef struct Bnode
{ int key;
struct Bnode *left;
struct Bnode *right;
} Bnode;
Bnode *BSearch(Bnode *bt, int k)
/* bt用于接收二叉排序树的根结点的指针,k用以接收要查找的关键字*/ { Bnode *p;
if(bt== ___(1)__ NULL ___)
return (bt);
p=bt;
while(p->key!= __(2)__ k ____)
{ if(k<p->key)
___(3)__ p=p->left ___;
else ___(4)_ p=p->right ____;
if(p==NULL) break;
}
return(___(5)_ p ____);
}
3.以下函数为链栈的进栈操作,x是要进栈的结点的数据域,top为栈顶指针struct node
{ ElemType data;
struct node *next;
};
struct node *top ;
}
4 .设有一个头指针为head的不带头结点单向链表,p、q是指向链表中结点类型的指针变
量,p指向链表中结点a, (设链表中没有结点的数据域与结点a的数据域相同),写出相关语句
(1).使该单向链表成为单向循环链表
(2)插入结点s,使它成为a结点的直接前驱
q=p; x=p->data;
while (__(1)_ q->next!=NULL __ )q=q->next;
q->next=head;
q=p; p=p->next;
while(p->data!=x)
{ q=p;
__(2)_ p=p->next;__
}
s->next=p;
__(3)_ q->next=s;__
期末综合练习三
一、单项选择题
1.在C语言中,顺序存储长度为3的字符串,需要占用()个字节。
A.4 B.3 C.6 D.12
2.深度为5的完全二叉树共有20个结点,则第5层上有()个结点(根所在结点为第一层)。
A.3 B.8 C.5 D.6
3.串函数StrCat(a,b)的功能是进行串()。
A.比较 B.复制 C.赋值D.连接
4.已知一个图的边数为m,则该图的所有顶点的度数之和为()。
A.2m B.m C.2m+1 D.m/2
5.一棵有n个结点采用链式存储的二叉树中,共有()个指针域为空。
A.n+1 B.n C.n-1 D.n-2 6.数据结构中,与所使用的计算机无关的是数据的()结构。
A.物理 B.存储 C.逻辑与物理D.逻辑
7.设一棵哈夫曼树共有n个非叶结点,则该树有()个叶结点。
A.n B.n+1 C.n-1 D.2n
8.链表所具备的特点是()。
A.可以随机访问任一结点B.占用连续的存储空间
C.插入删除不需要移动元素结点D.可以通过下标对链表进行直接访问
9.从一个栈顶指针为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;
10.线性表只要以()方式存储就能进行折半查找。
A.B.顺序C.关键字有序的顺序D.二叉树
11.一棵完全二叉树共有5层,且第5层上有六个结点,该树共有()个结点。
A.30 B.20 C.21 D.23
12.散列查找的原理是()。
A.在待查记录的关键字值与该记录的存储位置之间建立确定的对应关系
B.按待查记录的关键字有序的顺序方式存储
C.按关键字值的比较进行查找
D.基于二分查找的方法
13.在一个无向图中,所有顶点的度数之和等于边数的()倍。
A.3 B.2.5 C.1.5 D.2
14.对n个元素进行冒泡排序若某趟冒泡中只进行了()次元素间的交换,则表明序列已经排好序。
A.1 B.2 C.0 D.n-1
15.已知如图1所示的一个图,若从顶点V1出发,按深度优先搜索法进行遍历,则可能得到的一种顶点序列为()。
A.V1V2V4V8V5V3V6V7 B.V1V2V4V5V8V3V6V7
C.V1V2V4V8V3V5V6V7 D.V1V3V6V7V2V4V5V8
图1
16.排序过程中,每一趟从无序子表中将一个待排序的记录按其关键字的大小放置到已经排好序的子序列的适当位置,直到全部排好序为止,该排序算法是( )。
A.直接插入排序B.快速排序。