A[i][j]=i*j;
上面算法的时间复杂度为()
A.O(m2)B.O(n2)
C.O(m×n)D.O(m+n)
4.若线性表的插入和删除操作频繁地在表头或表尾位置进行,则更适宜采用的存储结构为
( )
A.无头结点的双向链表B.带尾指针的循环链表
C.无头结点的单链表D.带头指针的循环链表
5.设h是指向非空带表头结点的循环链表的头指针,p是辅助指针。
执行程序段
p=h;
while(p->next->next!
=h)
p=p->next;
p->next=h;
后(其中,p->next为p指向结点的指针域),则()
A.p->next指针指向链尾结点B.h指向链尾结点
C.删除链尾前面的结点D.删除链尾结点
6.假设带头结点的单向循环链表的头指针为head,则该链表为空的判定条件是( )
A.head==NULLB.head–>next==NULL
C.head!
=NULLD.head–>next==head
7.设顺序表有19个元素,第一个元素的地址为200,且每个元素占3个字节,则第14个元素的存储地址为()
A.236B.239C.242D.245
8.设有一个栈,按A、B、C、D的顺序进栈,则可能为出栈序列的是()
A.DCBAB.CDAB
C.DBACD.DCAB
9.栈和队列的共同点是()。
A.都是先进先出B.都是先进后出
C.只允许在端点处插入和删除元素D.没有共同点
10.若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?
()
A.1和5B.2和4C.4和2D.5和1
11.循环队列A[0..m-1]存放其元素值,用front和rear分别表示队头和队尾,则当前队列中的元素数是()。
A.(rear-front+m)%mB.rear-front+1
C.rear-front-1D.rear-front
12.最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是()。
A.(rear+1)MODn=frontB.rear=front
C.rear+1=frontD.(rear-l)MODn=front
13.循环队列存储在数组A[0..m]中,则入队时的操作为()。
A.rear=rear+1B.rear=(rear+1)mod(m-1)
C.rear=(rear+1)modmD.rear=(rear+1)mod(m+1)
14.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为()。
A.13B.33C.18D.
15.设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为()。
A.BA+141B.BA+180C.BA+222D.BA+225
16.二维数组A的每个元素是由6个字符组成的串,其行下标i=0,1,…,8,列下标j=1,2,…,10。
若A按行先存储,元素A[8,5]的起始地址与当A按列先存储时的元素()的起始地址相同。
设每个字符占一个字节。
A.A[8,5]B.A[3,10]C.A[5,8]D.A[0,9]
17.某二叉树的先根遍历序列和后根遍历序列正好相反,则该二叉树具有的特征是()
A.高度等于其结点数B.任一结点无左孩子
C.任一结点无右孩子D.空或只有一个结点
18.若一棵二叉树有11个叶子结点,则该二叉树中度为2的结点个数是( )
A.10B.11
C.12D.不确定的
19.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()
A.9B.11C.15D.不确定
20.一棵完全二叉树上有1001个结点,其中叶子结点的个数是()
A.250B.500C.254D.505
21.一个具有1025个结点的二叉树的高h为()
A.11B.10C.11至1025之间D.10至1024之间
22.二叉树的先序遍历和中序遍历如下:
先序遍历:
EFHIGJK;中序遍历:
HFIEJKG。
该二叉树根的右子树的根是:
()
A、EB、F C、G D、H
23.n个结点的线索二叉树上含有的线索数为()
A.2nB.n-lC.n+lD.n
24.由3个结点可以构造出多少种不同的二叉树?
()
A.2B.3C.4D.5
25.排序算法中,第一趟排序后,任一元素都不能确定其最终位置的算法是()
A.选择排序B.插入排序
C.冒泡排序D.快速排序
26.若构造一棵具有n个结点的二叉排序树,最坏的情况下其深度不超过()
A.
B.n
C.
D.n+1
27.在排序方法中,从未排序序列中依次取出元素与已排序序列(初始时为空)中的元素进行比较,将其放入已排序序列的正确位置上的方法,称为()
A.希尔排序B.插入排序
C.冒泡排序D.快速排序得分
28.对下列关键字序列用快速排序法进行排序时,速度最快的情形是( )。
A.{21,25,5,17,9,23,30}B.{25,23,30,17,21,5,9}
C.{21,9,17,30,25,23,5}D.{5,9,17,21,23,25,30}
29.当在一个有序的顺序存储表上查找一个数据时,即可用折半查找,也可用顺序查找,但前者比后者的查找速度()
A.必定快B.不一定C.在大部分情况下要快D.取决于表递增还是递减
30.分别以下列序列构造二叉排序树,与用其它三个序列所构造的结果不同的是()
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)
31.对N个元素的表做顺序查找时,若查找每个元素的概率相同,则平均查找长度为()
A.(N+1)/2B.N/2C.ND.[(1+N)*N]/2
32.下面关于二分查找的叙述正确的是()
A.表必须有序,表可以顺序方式存储,也可以链表方式存储C.表必须有序,而且只能从小到大排列
B.表必须有序且表中数据必须是整型,实型或字符型D.表必须有序,且表只能以顺序方式存储
33.下列排序算法中,其中()是稳定的。
A.堆排序,冒泡排序B.快速排序,堆排序
C.直接选择排序,归并排序D.归并排序,冒泡排序
34.对序列{15,9,7,8,20,-1,4}进行排序,进行一趟后数据的排列变为{4,9,-1,8,20,7,15};则采用的是()排序。
A.选择B.快速C.希尔D.冒泡
35.下列排序算法中,在待排序数据已有序时,花费时间反而最多的是()排序。
A.冒泡B.希尔C.快速D.堆
36.采用简单选择排序,比较次数与移动次数分别为()。
A.O(n),O(logn)B.O(logn),0(n*n)C.0(n*n),0(n)D.0(nlogn),0(n)
37.有一组数据(15,9,7,8,20,-1,7,4),用堆排序的筛选方法建立的初始堆为()
A.-1,4,8,9,20,7,15,7B.-1,7,15,7,4,8,20,9
C.-1,4,7,8,20,15,7,9D.A,B,C均不对。
38.归并排序中,归并的趟数是()。
A.O(n)B.O(logn)C.O(nlogn)D.O(n*n)
39.下面的排序为哪种排序法()
数组:
8,6,3,2,9
排序:
第1步6,3,2,8,9
第2步3,2,6,8,9
第3步2,3,6,8,9
第4步2,3,6,8,9
A)插入排序法B)快速排序法
C)冒泡排序法D)选择排序法
40.在对n(n>3)个元素进行选择排序的过程中,在第3趟需要从()个元素中选择出最小值元素。
A)n-2B)n-3
C)3D)4
41.循环队列的入队操作应为()。
A)rear=rear+1;data[rear]=x;
B)data[rear]=x;rear=rear+1;
C)rear=(rear+1)%size;data[rear]=x;
D)data[rear]=x;rear=(rear+1)%size;
42.如果以数组作为堆栈的存储结构,则出栈操作时()。
A)必须判断栈是否满B)判别各元素的类型
C)必须判断堆栈是否为空D)对堆栈不做任何判断
prior
data
next
43.双向链表节点结构如右:
节点类的结构如下:
classNode{
Objectdata;
Nodeprior;
Nodenext;
}
其中:
prior是指向前趋节点的链域;data是存放数据元素的数据域;next是指向后继节点的链域;
下面给出的算法段是要把一个新节点node作为非空双向链表中的节点node1的前趋,插入到此双向链表中。
能正确完成要求的算法段是()
A)node.prior=node1.prior;
node.next=node1;
node1.prior=node;
node1.prior.next=node;
B)node1.prior=node;
node.next=node1;
ode1.prior.next=node;
node.prior=node1.prior;
C)node.prior=node1.prior;
node.next=node1;
node1.prior.next=node;
node1.prior=node;
D)node1.prior=node;
node.next=node1;
node.prior=node1.prior;
node1.prior.next=node;
44.以下说法错误的是()。
A)二叉树可以是空集
B)二叉树的任一节点都有两棵子树
C)二叉树与树具有相同的树形结构
D)二叉树中任一节点的两棵子树有次序之分
45.设深度为k的二叉树只有深度为0和度为2的节点,则这类二叉树上所含节点的个数最少()个。
A)k+1B)2k
C)2k-1D)2k+1
46.设二叉树根节点的层次为0,一棵深度为h的满二叉树中的节点个数是()。
A)2hB)2h-1
C)2h-1D)2h+1-1
47.在对n个元素进行冒泡排序的过程中,第()对相邻元素之间的交换。
A)nB)n-1
C)n+1D)n/2
48.在对n个元素进行直接选择排序的过程中,需要进行()趟选择和交换。
A)nB)n-1
C)n+1D)n/2
49.折半查找法适用于存储结构为(),且按关键字已排好序的线性表
A)顺序存储B)链接存储
C)顺序存储或链接存储D)索引存储
50.设有序表的关键字序列为{1,4,6,10,18,35,42,53,67,71,78,84,92,99},当用折半查找法查找关键字67的节点时,经()次比较后查找成功。
A)2B)3
C)4D)12
51.在表长为n的顺序表中,实施顺序查找,在查找不成功时,与关键字比较的次数为()。
A)nB)1
C)n+1D)n-1
52.向一个栈顶指针为Top的链栈中插入一个p所指结点时,其操作步骤为().
A.Top->next=p;B.p->next=Top->next;Top->next=p;C.p->next=Top;Top=p;D.p->next=Top;Top=Top->next;
53.一棵完全二叉树上有1001个结点,其中叶子结点的个数是().
A.500B.501
C.490D.495
54.有12个记录的序列,采用冒泡排序最少的比较次数是().
A.1B.144
C.11D.66
二、填空题(本大题共10小题,每小题2分,共20分)
请在每小题的空格中填上正确答案。
错填、不填均无分。
55.链式存储结构的特点是借助_______来表示数据元素之间的逻辑关系。
56.当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用__顺序_存储结构。
57.已知指针p指向单链表L中的某结点,则删除其后继结点的语句是:
____
58.带头结点的双循环链表L为空表的条件是:
___。
59.在单链表p结点之后插入s结点的操作是:
_______。
60.设有指针head指向不带表头结点的单链表,用next表示结点的一个链域,指针p指向与链表中结点同类型的一个新结点。
现要将指针p指向的结点插入表中,使之成为第一个结点,则所需的操作为“p→next=head;”和“_________”。
61.设双链表中结点的前趋指针和后继指针的域名分别为t1和r1,指针s指向双链表中的一个结点(该结点既非头结点,也非尾结点),则删除s指针所指向结点的操作为“s->tl->r1=s->r1;”和“________”。
62.在一个长度为n的数组中删除第i个元素(1≤i≤n)时,需要向前移动的元素的个数是_____。
63.己知三对角矩阵A【1..9,1..9】的每个元素占2个单元,现将其三条对角线上的元素逐行存储在起始地址为1000的连续的内存单元中,则元素A[7,8]的地址为_
64.假设一个15阶的上三角矩阵A按行优先顺序压缩存储在一维数组B中,则非零元素A9,9在B中的存储位置k=____。
65.假设根结点的层数为1,具有n个结点的二叉树的最大高度是__。
66.设只含根结点的二叉树的高度为0,则高度为k的二叉树的最大结点数为___,最小结点数为____。
67.在有序表A[1..12]中,采用二分查找算法查等于A[12]的元素,所比较的元素下标依次为__________。
68.在n个记录的有序顺序表中进行折半查找,最大比较次数是_____。
69.前序序列和中序序列不相同的二叉树的特征是_______。
70.设F、C是二叉树中的两个结点,若F是C的祖先结点,则在采用后根遍历方法遍历该二叉树时,F和C的位置关系为:
F必定在C的_________。
71.深度为15的满二叉树上,第5层有_________个结点。
72.对一棵有100个结点的完全二叉树按层编号,则编号为49的结点,它的左孩子的编号为________。
73.假设一棵完全二叉树含1000个结点,则其中度为2的结点数为______。
74.在一棵二叉排序树上按_______遍历得到的结点序列是一个有序序列。
75.若用后根遍历法遍历题21图所示的二叉树,其输出序列为__________。
题21图
76.用____排序方法对关键字序列(20,25,12,47,15,83,30,76)进行排序时,前三趟排序的结果为:
20,12,25,15,47,30,76,83
12,20,15,25,30,47,76,83
12,15,20,25,30,47,76,83
77.在对一组关键字为(54,38,96,23,15,72,60,45,83)的记录采用直接选择排序法进行排序时,整个排序过程需进行_________趟才能够完成。
78.在索引顺序表上的查找分两个阶段:
一是查找______,二是查找块。
三、判断题(共12分,每空1分)
1.线性表的逻辑顺序与存储顺序总是一致的.()
2.完全二叉树中,若一个结点没有左孩子,则它必是叶子.()
3.若一个结点是某二叉树子树的中序遍历序列中的最后一个结点,则它必是该子树的先序遍历序列中的最后一个结点.()
4.折半查找只能在有序的顺序表上进行.()
5.对二叉排序树进行中序遍历得到的序列是由小到大有序的.()
6.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构.()
7.循环队列通常用指针来实现队列的头尾相接.()
8.顺序查找可以在顺序表上进行,不能在单链表上进行.()
9.在二叉排序树中,最大值结点和最小值结点一定是叶子结点.()
10.若输入序列为1,2,3,4,5,6,则通过一个栈可以输出序列3,2,5,6,4,1.()
11.插入排序是稳定的,选择排序是不稳定的.()
12.对有n个记录的集合进行快速排序,所需时间决定于初始记录的排列情况,在初始记录无序的情况下最好.()
四、解答题(本大题共2小题,每小题8分,共16分)
79.已知一棵线索化的二叉排序树如图所示。
(1)说明该树的线索化是基于何种遍历次序的;
(2)在该树中插入元素值为53的结点并修改相应线索,画出修改之后的树。
80.分别写出图中二叉树的先根、中根、后根遍历序列。
81.设要将序列(Q,H,C,Y,P,A,M,S,R)按字母升序排序,请分别画出采用堆排序方法时建立的初始堆,以及第一次输出堆顶元素后经过筛选调整的堆的完全二叉树形态。
82.已知一棵二叉树的中根遍历序列和后根遍历序列分别为BDAFEHGC和DBFHGECA,试画出这棵二叉树。
83.给定表(19,14,22,01,66,21,83,27,56,13,10)。
试按元素在表中的次序将它们依次插入一棵初始时为空的二叉排序树,画出插入完成之后的二叉排序树。
84.给定有序表D={006,087,155,188,220,465,505,508,511,586,656,670,700,
766,897,908},用二分查找法在D中查找586,试用图示法表示出查找过程。
85..循环队列的优点是什么?
如何判别它的空和满?
86.请写出冒泡排序的算法,并使用算法将下列数据进行排序{34,56,2,8,22,18,9,32,27}(16分)
五、算法设计题
87.设顺序表L是一个递增有序表,试写一算法,将x插入L中,并使L仍是一个有序表。
88.因已知顺序表L是递增有序表,所以只要从顺序表终端结点(设为i位置元素)开始向前寻找到第一个小于或等于x的元素位置i后插入该位置即可。
在寻找过程中,由于大于x的元素都应放在x之后,所以可边寻找,边后移元素,当找到第一个小于或等于x的元素位置i时,该位置也空出来了。
算法如下:
//顺序表存储结构如题2.7
voidInsertIncreaseList(Seqlist*L,Datatypex)
{
inti;
if(L->length>=ListSize)
Error(“overflow");
for(i=L->length;i>0&&L->data[i-1]>x;i--)
L->data[i]=L->data[i];//比较并移动元素
L->data[i]=x;
L->length++;
}
89.设计算法判断一个算术表达式的圆括号是否正确配对。
intPairBracket(char*SR)
{//检查表达式ST中括号是否配对
inti;
SeqStackS;//定义一个栈
InitStack(&s);
for(i=0;i {
if(S[i]=='(')Push(&S,SR[i]);//遇'('时进栈
if(S[i]==')')//遇')'
if(!
StackEmpty(S))//栈不为空时,将栈顶元素出栈
Pop(&s);
elsereturn0;//不匹配,返回0
}
ifEmptyStack(&s)return1;//匹配,返回1
elsereturn0;//不匹配,返回0
}
90.假设线性表采用顺序存储结构,表中元素值为整型。
阅读算法f30,并回答下列问题:
(1)设顺序表L=(3,7,3,2,1,1,8,7,3),写出执行算法f30后的L;
(2)简述算法f30的功能。
voidf30(SeqList*L)
{inti,j,k;
k=0;
for(i=0;ilength;i++)
{for(j=0;jdata[i]!
=L->data[j];j++);
if(j==k)
{if(k!
=i)L->data[k]=L->data[i];
k++;
}
}
L->length=k;
}
91.某带头结点的单链表的结点结构说明如下:
typedefstructnode1
{
intdata;
structnode1*next
}node;
试设计一个算法intcopy(node*head1