数据结构本期末综合练习2014年12月

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构期末综合练习
2014年 12月
期末综合练习一
一、单项选择题
1 . 单向链表所具备的特点是 ( ) 。

A. 可以随机访问任一结点
B. 占用连续的存储空间
C. 插入删除不需要移动元素
D. 可以通过某结点的指针域访问其前驱结点 2. 头指针为 head 的带头结点的单向链表为空的判定条件是 ( ) 为真。

A. head= =NULL
B. head->next= =NULL
C. head->next=NULL;
D. head->next!= NULL
3.设有一个长度为 18的顺序表, 要在第 6个元素之前插入一个元素 (也就是插入元素作为
以交替进行) 。

A . r=r next;
新表的第 6 个元素) ,则移动元素个数为
)。

A . 12
.5 C. 13
.6
4.设有一个长度为 32 的顺序表,要删除第 8 个元素需移动元素的个数为(
)。

A . 9 B
.8 25 .24
5.栈和队列的共同特点是 )。

A .都是线性结构
.元素都可以随机进出 C.都是先进后出
.都是先进先出
6.一个栈的进栈序列是
2, 4, 6,8, 10,则栈的不可能输出序列是(
)(进栈出栈可
A . 2,4,6,8,10 .8,6,10,2,4 C .8,10,6,4,2
.10,8,6,4,2
7.元素 1, 3,5,7 按顺序依次入队列,按该队列的出队序列进栈,该栈的可能输出序列是
)(进栈出栈可以交替进行) 。

A . 7, 5,1,3 .7,3,1,5 C .5, 1,3,7
.7,5,3,1
8.一个队列的入队序列是
a,b,c,d, 按该队列的可能输出序列使各元素依次入栈,该栈的可
能输出序列是
)。

(进栈出栈可以交替进行) 。

A . d,c,b,a .c,a,b,d C . d,b,a,c
.d,a,b,c
9.在一个不带头结点的链队中,假设
f 和 r 分别为队头和队尾指针,则对该队列进行出 队操作中并把结点的值保存在变量
e 中,其运算为e=
f data ;和( )。

r next=r;
C . f=f next;
D .f next=f;
10.在一个链队中,假设 f 和 r 分别为队头和队尾指针, p 指向一个已生成的结点 , 现要为
该结点的数据域赋值 e ,并使结点入队的运算为 p->data=e; p->n ext=NULL ;
和( )。

A . f->next=p; f=p;
B . r->next=p;r=p;
C . p->next=r;r=p; D
. p->next=f;f=p;
11 •设有一个对称矩阵 A ,采用压缩存储的方式,将其下三角部分以行序为主序存储到一维 数组 B 中
(数组下标从 1 开始), B 数组共有 45 个元素 , 则该矩阵是( )阶的对称 矩阵。

A .15
B .11
C .10 D
.9
12•设有一个24阶的对称矩阵A ,采用压缩存储的方式(矩阵的第一个元素为
a i,i ),将其
)。

A. a1
C. a3
).
A. a1 C. a3
A. 6 C. 5
19.
设一棵哈夫曼树共有 18 个叶结点,则该树有(
13. 14. 三角部分以行序为主序存储到一维数组
号元素对应于矩阵中的元素是( A. a io,8 B . a 9,2 F 列是C 语言中” abcd321ABCD A. C. abcD
21ABC 〞 D. B. 字符串 a1=
BEIJING " , a2 = )。

a
8,2
B 中(数组下标从 1 开始),则数组中第 30
D .
a 8 ,5
的子串的选项是(
abcABCD 〞 321a "
BEI " , a3=
)。

BEFANG a4= “ BEFI "中最大的是
15.
字符串 a1=
BEIJING " , a2 =
BEF 〞 , a3=
BEFANG , a4=
“ BEFI "最小的是
16. 程序段 char
a[ ]= English ” ; char *p=a; int
n=0;
while( *p !=
0'){ n++; p++;} 结果中 ,n 的值是( )。

17. —棵有 20 个结点采用链式存储的二叉树中,共有( 个指针域为空。

A . 21
. 20 . 19 . 18
18.在一棵二叉树中,若编号为 5 的结点存在左孩子, 则左孩子的顺序编号为(
)。

. 10 C . 11
. 12
B. a2 D. a4 B. a2 D. a4
B.8 D.7
)个非叶结点。

A . 18 .16
20 .设一棵采用链式存储的二叉树,除叶结点外每个结点度数都为2,该树结点中共有20
个指针域为空。

则该树有()个叶结
点。

21
.
22
.
A . 21
如图1所示的一个图,
.22 C . 9 .10
若从顶点g出发,按深度优先搜索法进行遍历,则可能得到的一种顶点序列为()。

A
若从顶点
已知如图2所示的一个图,
.gaebcfd D . gaedfcb
的一种顶点序列为()
°
A . abcedfg
23
.
24
.
a出
发,
按广度优先搜索法进行遍历,则可能得到
.aebcfdg D .acfdebg
abcefdg C
线性表以(
.关键字有序的
在有序表{10,23
时,经(
25 .有一个长度为
均比较次数为(
)方式存储,能进行折半查
找。

B .关键字有序的顺序
,32, 36, 53, 66, 68, 76,
)次比较后查找成
功。

C .链接
87, 90,101,120} 中,
.顺序
用折半查找值53 8的有序表,按折半查找对该表进行查找,在等概率情况下查找成功的平
A. 22/8 B . 20/8 C . 23/8 D . 21/8
26.有一个长度为11的有序表,按折半查找对该表进行查找,在等概率情况下查找成功的平均比较次
数为()。

A. 29/11 B . 33/11 C . 26/11 D . 30/11
27.排序算法中,从尚未排序序列中依次取出元素与已排序序列(初始为空)中的元素进行
比较(要求比较次数尽量少),然后将其放入已排序序列的正确位置的方法是()。

A .折半插入排序
B .直接插入排序
C .归并排序
D .选择排序
28.设已有m个元素有序,在未排好序的序列中挑选第m+1个元素,并且只经过一次元素的交换就使第m+1个元素排序到位,该方法是()。

A .堆排序
B .简单选择排序
C .快速排序
D .归并排序
29.排序方法中,从未排序序列中挑选兀素,并将其依次放入已排序序列(初始为空)的一一
端的方法,称为()排序。

A .堆
B .冒泡
C .选择
D .快速
30.一组记录的关键字序列为(32, 65, 42, 24, 26, 80),利用快速排序,以第一个关键
字为分割元素,经过一次划分后结果为()。

A . 26, 24, 32, 42, 65, 80
B . 24, 26, 32, 42, 65, 80
C. 26, 24, 32, 65, 42, 80 D . 26, 24, 32, 80, 42, 65
二、填空题
1.______________________________________________ 广义表(a , (a ,b) , d , e ,
((i ,j ) ,k ))的长度是______________________ 。

2•结构中的数据元素存在一对多的关系称为___________ 结构。

3.广义表的(c, a , (a ,b) , d , e ,((i ,j ) ,k )深度是。

4•栈的操作特点是________________ 。

5.设顺序队列的类型为typedef struct
{ ElemType data[MaxSise];
int fron t,rear;
}Squeue;
Squeue *sq;
sq为指向顺序队列的指针变量,要进行新元素x的入队操作,按教课书约定,可用语句sq->data[sq->rear]=x;禾口 _____ 。

6.广义表的(a , (a ,b) , d , e ,((i ,j ) ,k ))深度是。

7.序列4,2,5,3,8,6, 采用冒泡排序算法,经一趟冒泡后,序列的结果是_____________。

(按由小
到大顺序)
8.广义表((a ,b) , d , e ,((i ,j ) ,k ))的长度是。

9.在对一组记录(50, 34, 92, 19, 11, 68, 56, 41, 79)进行直接插入排序(由小到大排
序),当把第7个记录56插入到有序表时,为寻找插入位置需比较_______________ 次。

10.设顺序队列的类型为typedef struct
{ ElemType data[MaxSise];
int fron t,rear;
}Squeue;
Squeue *sq;
sq为指向顺序队列的指针变量,要进行元素的出队操作,并把元素赋给边量x,按教科书
约定,可用语句x=sq->data[sq->front];和________ 。

11.数据结构中,________ 可以由一个或多个数据项组成。

12.设顺序队列的类型为typedef struct
{ ElemType data[MaxSise];
int fron t,rear;
}Squeue;
Squeue *sq;
sq为指向顺序队列的指针变量,要进行新元素x的入队操作,按教课书约定,可用语句sq->data[sq->rear]=x;禾口______ 。

13.循环队列中,设front和rear分别为队头和队尾指针,(最多元素为MaxSize,采用少
用一个元素的模式),判断循环队列为满的条件为____________ 为真。

14.序列14,12,15,13,18,16,采用冒泡排序算法,经一趟冒泡后,序列的结果是 __________ 。

(由小
到大排序)
15.排序算法中,从尚未排序序列中依次取出元素与已排序序列(初始为空)中的元素依次
进行比较,然后将其放入已排序序列的正确位置的方法是 __________________ 。

16.数据结构中,________ 之间的抽象关系称为逻辑结构。

17.对稀疏矩阵进行压缩存储,可采用三元组表,一个6行7列的稀疏矩阵A共有34个零元素,其相
应的三元组表共有________________ 个元素。

18.循环队列中,设front和rear分别为队头和队尾指针,(最多元素为MaxSize,),判断循环
队列为空的条件为_________ 为真。

19.在双向链表中,要删除p所指的结点,可以先用语句(p->prior )
->next=p->next ;然
后再用语句(p_>next )->prior= __________ 。

20.排序算法中,从尚未排序序列中依次取出元素与已排序序列(初始为空)中的元素进行
比较(要求比较次数尽量少),然后将其放入已排序序列的正确位置的方法是_____________ 。

21.在双向链表中,每个结点有两个指针域,一个指向结点的直接后继,另一个指向
22.对稀疏矩阵进行压缩存储,可采用三元组表,矩阵元素cb,4对应的三元组为_____________ 。

23.把数据存储到计算机中,并具体体现数据之间的逻辑结构称为 ____________ 结构。

24.在双向链表中,要删除p所指的结点,其中所用的一条语句(p->next)->prior=p->prior;
的功能是:使P所指结点的直接后继的左指针指向 _____________ 。

三、综合题
1.设数据集合a={1,12,5,8,3,10,7,13,9}
(1)依次取a中各数据,构造一棵二叉排序树。

(2)说明如何依据此二叉树得到a的有序序列。

(3)对该二叉树进行查找,成功查找到7要进行多少次元素间的比较?
(4)给出对该二叉树后序遍历的序列。

2.设数据集合a={62,74,30,15,56,48}
1)依次取 a 中各数据,构造一棵二叉排序树。

2)为了成功查找到48 需要进行多少次元素间的比较
3)给出对该二叉树后序遍历的序列。

3.设有序表为(2, 5, 11, 12, 30, 48, 58, 70, 78, 79, 90) , 元素的序号依次为
1,2,3, (11)
( 1 )画出对上述查找表进行折半查找所对应的判定树(树中结点用序号表示)
( 2 )说明成功查找到元素 2 需要经过多少次比较?
(3)说明不成功查找元素75 需要经过多少次比较?
(4)给出中序遍历该折半查找判定树的序列
4.设有序表为(3,9,15,26,38,41 ,53,74,81 ,96,97,99),元素的序号依次为1,2,……,12。

(1)画出对上述有序表进行折半查找所对应的判定树(树结点用序号表示)。

(2)设查找5号元素(38),需要进行多少次元素间的比较才能确定不能查到, 依次和哪些元素进行了比较?(要求写出具体元素)。

(3)给出后序遍历该二叉树的序列。

(4)给出中序遍历该二叉树的序列。

四、程序填空题
1. 设有一个不带头结点的单向链表,头指针为head, p 、prep 是指向结点类型的指针,该链表在
输入信息时不慎把相邻两个结点的信息重复输入, 以下程序段是在该单向链表中查找这相邻两个结点, ,把该结点的数据域data 打印出来,并把其中之一从链表中删除,填写程序中的空格。

prep=head; p=prep->next;
while(p - > data!=prep- >data)
{ prep=p;
__(1)___
}
printf(“min=%d”, __(2)___);
prep->next= __(3)___
2.学生信息存放在结构数组中,每个数组元素存放一个学生的信息,下标从0到n-1。

数组元素按学号num由小到大有序排列,以下函数在a[0]到a[n-1]中,用折半查找算法查找关键字num 等于k 的记录,查找成功返回该记录的下标(数组元素的下标)。

失败时返回-1,完成程序中的空格。

typedef struct
{
char sex;
int num;
}NODE;
int Binary_Search(NODE a[],int n, int k)
{
int low,mid,high;
low=0;
high=n-1;
while( ___(1) ____ )
{
mid=(low+high)/2;
if(a[mid].num = =k)
return __(2) _____ ;
else if( ___(3) _____ )
low=mid+1;
else __(4) _______ ;
}
return -1 ;
}
3 . 以下程序是折半插入排序的算法(按记录中关键字key 排序)
设待排序的记录序列存放在a[1],…a[中],以a[0]作为辅助工作单元,以下程序是要把
a[i]插入到已经有序的序列a[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<a[m].key) __(3)___ else
__(4)___
}
for ( k=i-1;k>=j+1;k- -) __(5)___=a[k];
a[j+1]=a[0];
}
}
4.以下函数是二叉排序树的查找算法,若二叉树为空,则返回根结点的指针,否则,返回
值是指向树结点的结构指针p(查找成功p指向查找到的树结点,不成功,则p指向为NULL),
完成程序中的空格。

struct bnode
{ int key;
struct bnode *left;
struct bnode *right;
} ;
typedef struct bnode Bnode
Bnode *BSearch(Bnode *bt, int k) /* bt 用于接收二叉排序树
的根结点的指针,k用以接收要查找的关键字
*/
{ Bnode *p;
if(bt = = NULL)
return (bt);
___(1) _____
while(p->key != __(2)___ )
{ if(k<p->key)
___(3) ___ ;
else ___(4) ______ ;
if(p==NULL) break;
} return p ;
}
期末综合练习一答案
一、单项选择题
1.C 2 .B 3 .C 4 .D 5 .A 6 .B 7 .D 8 .A 9 .C 10.B 11 .D 12 .C 13 .A 14.A
15 .B 16 .D 17 .A 18 .B 19.C 20 .D 21 .D 22 .B 23 .B 24 .D 25.D 26 .B 27 .A
28.B 29.C 30.A
二、填空题
1. 5
2.树形
3. 3
4.先进后出
5. sq->rear++;
6.3
7.2,4,3,5,6,8
8.4
9. 3
10.sq->fronf++;
11. 数据元素
12.sq->rear++;
13. front= =(rear+1)% MaxSize
14.12,14,13,15,16,18
15.直接插入排序
16.数据元素
17.8
18.front= =rear
19. p->prior ;
20.折半插入排序
21.结点的直接前驱
22.(3,4, a3,4)
23.存储
24.P所指结点的直接前驱
三、综合应用题
1.
(1)图 3
⑵中序遍历 1 , 3,5,7,8,9 , 10 , 12,13
⑶5次
(4) 3,7,9,10,8,5,13,12,1
图3 2
(1)图 4
(4)4 次
(5)15,48,56,30,74,62
3
(1 )图 5
图5
⑵3次
⑶4次
(4) 1,2, 3, 4, 5, 6, 7, 8, 9, 10, 11 (序号)
4.
(1)图 6
(2)4 次41,15,26,38
(3)2(9),1(3),5(38),4(26),3(15),8(74),7(53),10(96),12(99),11(97),9(81),6(41)
(4)1( 3) ,2(9), 3(15),4(26),5(38),6(41),7(53),8(74),9(81),10(96),11(97),12(99)
图6
四、程序填空题
1.
⑴ p=p->n ext;
(2)p->data 或prep->data
(3)p-> next;
2.
⑴low<=high
(2)mid
(3)a[mid] .n um<k
(4)high=mid-1;
3.
(1) n
⑵(s+j)/2;
⑶ j=m-1;
(4)s=m+1;
(5)a[k+1]
4.
(1)p=bt;
(2)k
⑶ p=p->left
(4)p=p->right
期末综合练习二
一、单项选择题
1. 数据的存储结构包括数据元素的表示和( )。

C . 相关算法 D.
2 . 下面关于线性表的叙述中 , 错误的是 ( )
A . 线性表采用顺序存储 , 必须占用一片连续的存储空间
B. 线性表采用顺序存储 ,进行插入和删除操作 , 不需要进行数据元素间的移动
C. 线性表采用链式存储,不必占用连续的存储空间
D. 线性表采用链式存储,进行插入删除操作,不需要移动元素 3.设有一个长度为 22 的顺序表,要删除第 8 个元素需移动元素的个数为( )。

A . 15
B . 22
C .14
D . 23
4 . 设有一个长度为 28 的顺序表,要在第 12 个元素之前插入一个元素(也就是插入元素作 为新
表的第 12 个元素),则移动元素个数为( )。

A .12
B .17
C. 13 D
.11
5.元素 2,6,10,14 按顺序依次进栈,按该栈的可能输出序列依次入队列,该队列
替进行)。

A . 8,6,4,2
C .4,2,8,6 top 的链栈进行进栈操
作,设 P 为指向待
进栈的结点的指针,把 e
的值赋值给该结点的数据域,然后使该结点进栈,则执行(
A . p->data=e; p=top->next; top=top next;
B . p->data=e;p->next=top;top=p;
C . p->data=e;top=p;
D . p->data=e;p->next=top->next; top =p;
8.对一个栈顶指针为 top 的链栈进行出栈操作,用变量 e 保存栈顶元素的值 ,则执行 ( )。

C . top=top->next; e=top->data;
D .top=top->next; e=data; 9 . 对不带头结点的单向链表 , 判断是否为空的条件是( )(设头指针为 head )。

A . head==NULL
B
. head->next= =NULL
A . 数据处理的方法 B.
数据元素间的关系的表示 数据元素的类型
的不可能输出序列是是(
)。

(进栈出栈可以交替进行) 。

A . 14,10,6,2
. 2,6,10,14 C . 14,10,2,6
. 6,2,14,10
6.元素 2, 4,6,8 按顺序依次进栈,则该栈的不可能输出序列是(
)(进栈出栈可以交
. 2,4,6,8 . 8,6,2,4
7.对一个栈顶指针为 )。

A. e= top->next; top->data=e; B . e=top->data; top=top->next;
C.head->next= =head 10.在一个尾指针为rear
一个结点,可执行(
A . rear next= s; s C. rear=s next
D . head =NULL
的不带头结点的单循环链表中,插入一个s所指的结点,并作为第)。

next=rear next B . rear next=s
D . s next=rear
11.设有一个25阶的对称矩阵A (矩阵的第一个元素为
a i,i),
next;
next ; rear next=s; 采用压缩存储的方式,将其
F三角部分以行序为主序存储到一维数组B中(数组下标从 1 开始),则矩阵中元素a7,5
在一维数组 B 中的下标是()。

A.34 .14 .26 .27
12.设有一个28阶的对称矩阵A (矩阵的第一个元素为a i,i), 采用压缩存储的方式,将其
三角部分以行序为主序存储到一维数组中(数组下标从 1 开始),则数组中第40 号元素对应于矩阵中的元素是()。

A.a1 0,8 B

a9,4 C.a9
,5
D.a8,
5
13. 数组 a 经初始化char a[ ]= English a[7] 中存放的是()。

A. 字符串的结束符
B. 字符h
C. 〝h
D. h
14. 数组 a 经初始化char a[ ]=
“ Engli sh a[1] 中存放的是()。

A. 字符n
B. 字符 E
C. 〝n〞
D. E

15 .设主串为“ ABcCDABcdEFaB”以下模式串能与主串成功匹配的是()。

A. aBc
B. BCd
C. ABC D .Abc
16. 程序段char a[ ]= English ” ; char *p=a; int
n=0;
while( *p != O') n++; P++;} 结果中,P指向( )。

A. 字符h
B.a
C. 字符串的结束符
D.7
17.设一棵哈夫曼树共有11 个非叶结点,则该树有()个叶结点。

A .22 。

10 .11 .12
18.在一棵二叉树中,编号为17 的结点的双亲结点的的顺序编号为
()。

A .34 .7 C .9 .8
19.一棵具有38 个结点的完全二叉树,最后一层有()个结
点。

.5 .6 .8
20.设一棵采用链式存储的二叉树,除叶结点外每个结点度数都为个指针域为空。

则该树共有()个非叶子结点2

该树结点中共有20
A. 21 B . 22
21.已知如图1所示
的一个图,若从顶点到的一种顶点序列为(
)。

A . V0V1V2MVV7V4V5V8 B
C . V0V1V2V3V4V5V6MV8 D
C . 9
D . 10
V出发,按广度优先搜索法进行遍历,则可能

.V O V1V2V3V4V5V8V6V
.V O V1V2V3V4V8V5V6M
22.已知如图1所示的一个图,若从顶点V0出发,按深度优先法进行遍历,则可能得到的
一种顶点序列为()。

23.在有序表{10,14 , 34, 43, 47, 64, 75, 80, 90}中,用折半查找法查找值80时,经()
次比较后查找成功。

A. 4 B . 2 C . 3 D . 5
24.对()进行中序遍历,可以使遍历所得到的序列是有序序列。

A .完全二叉树
B .二叉排序树
C .满二叉树排
D .哈夫曼树
25.排序算法中,从尚未排序序列中依次取出元素与已排序序列(初始为空)中的元素进行
比较,然后将其放入已排序序列的正确位置的方法是()。

A .冒泡排序
B .直接插入排序
C .归并排序
D .选择排序
26.有一个长度为7的有序表,按折半查找对该表进行查找,在等概率情况下查找成功的平
均比较次数为()。

A. 17/7 B . 18/7 C . 21/7 D . 20/7
A. V 0V1V2VVV5V3V6V7 B . W1W4V5V3V3V6V7
C . V O V1V2V4V8V3V5V5V7
D . V0^V B V5V7V2V4\5V3
为分割元素,经过一次划分后结果为()。

27. 一组记录的关键字序列为(22, 55 , 32, 14,16 , 60),利用快速排序,以第一个关键字
A . 16, 14, 22, 55, 32, 60
B . 16, 14, 22, 32, 55, 60
C. 16, 14, 22, 60, 32, 55 D . 14, 16, 22, 32, 55, 60
28.排序方法中,从未排序序列中挑选兀素,并将其依次放入已排序序列(初始为空)的一一
端的方法,称为()排序。

A .堆
B .冒泡
C .选择
D .快速
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.—组记录的关键字序列为(12, 45, 22, 4,6 , 50),利用快速排序,以第一个关键字为分割兀素,经过一次划分后结果为()。

A . 6, 4, 12, 45, 22, 50
B .6, 4, 12, 22, 45, 50
C. 6, 4, 12, 50, 22, 45 D .4, 6, 12, 22, 45, 50
二、填空题
1•把数据存储到计算机中,并具体体现数据之间的逻辑结构称为 ___________ 结构。

2•结构中的数据元素存在一对一的关系称为___________ 结构。

3•从一个栈顶指针为h的链栈中删除一个结点时,用x保存被删结点的值,可执行x=h->data; 和________ 。

(结点的指针域为next)。

4•向一个栈顶指针为h的链栈中插入一个s所指结点时,可执行________ 和h=s;操作。

(结点的指针域为next)
5.广义表的(a , d , e , (i ,j ) ,k )表尾是。

6•广义表的(a , a ,b , d , e ,((i ,j ) ,k ))表头是。

7•广义表的((a,c) , a ,b , d , e ,((I ,j ) ,k ))表头是。

8.广义表的((a,c) , d ,( e ,i ,j ,k ))表尾是__ 。

9.设顺序队列的类型为typedef struct
{ ElemType data[MaxSise];
int fron t,rear;
}Squeue;
Squeue *sq;
sq为指向顺序队列的指针变量,要进行元素的出队操作,并把元素赋给变量x,按教课书约定,可用语句x=sq->data[sq->front];和 ________ 。

10.设顺序队列的类型为typedef struct
{ ElemType data[MaxSise];
int fron t,rear;
}Squeue;
Squeue *sq;
sq为指向顺序队列的指针变量,要进行新元素x的入队操作,按教科书约定,可用语句sq->data[sq->rear]=x;禾口______ 。

11.对20个元素的序列用冒泡排法进行排序,第5趟冒泡共需要进行__________ 次元素间的
比较。

12.对16个元素的序列用冒泡排法进行排序,共需要进行____________ 趟冒泡。

13.在对一组记录
(5,7,3,1,2,6,4,10,9,8,16,13,18,17 ))进行直接插入排序(由小到大排序),当为分割元素,经过一次划分后结果为()。

把第10个记录8插入到有序表时,为寻找插入位置需比较 _______________________________ 次。

14.在对一组记录(50, 34, 92, 19,11,68, 56,41,79)进行直接插入排序(由小到大排
序),当把第8个记录41插入到有序表时,为寻找插入位置需比较_______________ 次。

15.从数据结构的角度,城市间的交通线路的关系属于_____ _______ 结构。

16.数据的________ 在计算机中的表示称为物理结构。

17.循环队列用a[0],…,a[7]的一维数组存放队列元素,(采用少用一个元素的模式),设front 和rear分别为队头和队尾指针,且front和rear的值分别为2和7,当前队列中的元素个数是
18.循环队列用a[0],…,a[5]的一维数组存放队列元素,(采用少用一个元素的模式),设front
和rear分别为队头和队尾指针,且front和rear的值分别为3和0,当前队列中的元素
个数是________ 。

19.对n个整数用冒泡法进行排序,某趟冒泡中未进行元素间的______________ ,说明n个元
素已排好序。

20.设已有m个元素有序,在未排好序的序列中挑选第m+1个元素,并且只经过一次元素的交换就使第m+1个元素排序到位,该方法是_______________ 。

21.对稀疏矩阵进行压缩存储,可采用三元组表,每个非零元素对应的三元组包括的三项信息
是行下标、列下标和______________ 。

22.对稀疏矩阵进行压缩存储,可采用三元组表,一个6行7列的稀疏矩阵A相应的三元组
表共有8个元素,则矩阵A共有__________ 个零元素。

23.在双向链表中,要删除p所指的结点,其中所用的一条语句( p->prior) ->next=p->next ;
的功能是:使P所指结点的直接前驱的右指针指向_____________ 。

24.在双向链表中,要删除p所指的结点,可以先用语句(p->next) ->prior= (p->prior);
然后再用语句(p->prior) ->next= _____________ 。

三、综合题
1•设数据集合a={52,20,46,38,5,64,40}
(1)依次取a中各数据,构造一棵二叉排序树。

(2)对该二叉树进行查找,成功查找到38,和46各要进行多少次元素间的比较?
(3)给出按后序遍历该二叉排序树的序列。

2•对给定的数列b={ 6,15,3,7,19,8,5,17,4}
(1)依次取b中各数据,构造一棵二叉排序树
(2)给出按中序遍历该二叉排序树的序列
(3)给出按后序遍历二叉排序树的序列
(4)画出在二叉树中删除结点3后的树结构
3.(1 )设根为第1层,对给定权值1 , 3 , 4, 4, 5, 6,构造深度为5的哈夫曼树。

提示:构造中当出现被选的结点值有多个相等时,可尝试不同组合,以得到要求的树的深度。

(2)求树的带权路径长度。

(3)给出对上述哈夫曼树中序遍历得到的的序列
(4)一棵哈夫曼树有n 个非叶结点,构造该树共有多少个权重值?简述理由?
4.(1) 以4,5, 6,13, 11, 12 作为叶结点的权,构造一棵哈夫曼树。

(2) 给出相应权重值叶结点的哈夫曼编码。

(3) 一棵哈夫曼树有n 个叶结点,该树共有多少个结点?简述理由?
(4)给出对上述哈夫曼树中序遍历的序列。

四、程序填空题
1.职工体检表存放在结构数组中,要求以工资号num 为关键字进行排序,以下函数用直接选择排序算法,对a[1],a[2],…a[n]中的记录进行排序,完成程序中的空格。

typedef struct { int age;
int num; char sex;
}NODE;
void selsort(NODE a[],int n)
{
int i,j,k;
NODE temp;
for(i=1;i<= n-1;i++)
{ k=i;
for(j=i+1;j<= ___(1 ) _____ ;j++)
if(a[j].num < __(2) _____ ) k=j;
if(i!=k)
{ temp=a[i];
___(3) _____ ;
}
(4)
}
2.职工信息存放在结构数组中,每个数组元素存放一个学生的信息,下标从1到n,以a[0] 作为辅助工作单元。

现要以职工的工资号num为关键字进行排序,采用折半插入排序的算法,以下程序是要把a[i]插入到已经有序的序列a[1],…a[i-1]中,(i=2,3,4,…,n)。

typedef struct
{
char sex;
int num;
}NODE;
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]. num; s=1; j=i-1;
while (s<=j) { m=__(2)___
if( x<a[m]. num) __(3)— else
__(4)—
}
for ( k=i-1;k>=j+1;k- a[k+1] = (5)
a[j+1]=a[0];
}
}
3.设有一个头指针为head的不带头结点单向链表,p、q是指向链表中结点类型的指针
变量,p指向链表中结点a,(设链表中没有结点的数据域与结点a的数据域相同) 写出相关语句。

(1)•使该单向链表成为单向循环链表
(2)插入结点s,使它成为a结点的直接前驱
q=p; x=p_>data;
while ( __(1) __ )q=q->next;
q_>n ext= __(2)__;
q=p; p=p->n ext;
while(p->data!=x)
{ q=p;
—⑶—
}
s_>n ext=p;
—⑷—
4 .设有一个头指针为head的不带头结点单向链表,p、q是指向链表中结点类型的指针变量,p
指向链表中某结点a (设链表中没有结点的数据域与结点a的数据域相同),写
出相关语句
(1)使该单向链表成为单向循环链表
(2)删去a结点q=p; x=p->data;
while ( q->next!=NULL ) q=q->next;

q=p; p=p->n ext;
while(p->data!=x)
{ q=p;
}
3)
期末综合练习二答案
一、单项选择题
1. B 2 . B 3 .C 4 . B 5 .C 6 .D7 . B 8 . B 9 . A 10.D
11 .C 12 . B
13 . A 14 . A 15 . A 16 . C 17 . D 18 . D 19 . A 20 . C 21 . C 22 . A 23 . C
24 . B 25 . B 26 . A 27 . B 28 . C 29 . A 30 . B
二、填空题
1.物理(存储)
2.线性
3.h=h->n ext;
4.s->n ext=h;
5.( d , e , (i ,j ) ,k )
6.a
7.( a , c)
8.( d , (e ,i ,j ,k ))
9.sq->fronf++;
10.sq->rear++;
11.15
12.15
13.3
14.5
15.图状
16.逻辑结构
17.5
18.3
19.交换
20.选择排序
21.行下标列下标数组元素的值
22.34
23.P所指结点的直接后继
24.p->next ;
三、综合应用题
1.
(1)图 2
(2)4次3次
(3)5, 40, 38, 46, 20, 64, 52
图2
2.
(1)图 3
⑵ 3,4,5,6,7, 8,15,17,19
(3)4,5,3,8,7,17,19,15,6
⑷图4
3.
(1)图 5
(2)WPL=1*4+3*4+4*3+6*2+4*2+5*2=58
(3)1,4,3,8,4,14,6,23,4,9,5
⑷n+1,因为叶结点比非叶结点多1
4 0000
5 0001
6 001
13 01
11 10
12 11
(3)2n-1个,因为非叶结点数比叶结点数少一个,非叶结点数为n-1,所以共有
(4)4,9,5,15,6,28,13,51,11,23,12
四、程序填空题
1.
(1)n
(2)a[k].key
(3)a[i]=a[k]
(4)a[k]=temp
2.
⑴n
⑵(s+j)/2;
(3)j=m-1;
(4)s=m+1;
(5)a[k]
3.
(1)q->next!=NULL
(2)head
4.
2n-1 个(3
(3)p=p->next;
(4)q->next=s;
4.
(1) q->next=head;
(2)p=p->next;
(3)q->next=p->next;。

相关文档
最新文档