现代科技学院《软件技术基础》练习题+答案.docx
《现代科技学院《软件技术基础》练习题+答案.docx》由会员分享,可在线阅读,更多相关《现代科技学院《软件技术基础》练习题+答案.docx(27页珍藏版)》请在冰豆网上搜索。
![现代科技学院《软件技术基础》练习题+答案.docx](https://file1.bdocx.com/fileroot1/2023-3/29/abb92017-cb29-4daa-bef1-54a1a55cd72a/abb92017-cb29-4daa-bef1-54a1a55cd72a1.gif)
现代科技学院《软件技术基础》练习题+答案
《软件技术基础》-练习题
第一章算法
一、选择题
1.算法的复杂度包括【】。
A、时间复杂度
B、空间复杂度
C、时间及空间复杂度
D、以上都不对
2.若x在长度为n的无序线性顺序表中的概率为50%,则在该表中查找x的平均查找次数(平均性态分析)为【】。
A、(n*3+1)/4
B、(n-1)/2
C、(n+1)/2
D、(n+1)*n/2
3.若x在长度为n的无序线性顺序表中的概率为50%,则在该表中查找x的最坏情况分析为【】。
A、n/2
B、(n-1)/2
C、(n+1)/2
D、n
4.已知基本运算执行次数与n的关系,则下列哪个时间复杂度最大:
【】。
A.f(n)=1
B.f(n)=2n-1
C.f(n)=10000n+10000
D.f(n)=n2-10000
5.算法分析的目的是【】。
A.找出数据结构的合理性
B.研究算法中的输入和输出的关系
C.分析算法的效率以求改进
D.分析算法的易懂性和文档性
二、填空题
1.常用算法包括_________、_________、_________、_________、_________和回溯法。
2.算法的基本特征有_________、_________、有穷性、输入和输出。
3.下列程序段的时间复杂度是____。
for(i=1;i<=n;i++)
A[i,i]=0;
4.下列程序段的时间复杂度是____
s=0;
for(i=1;i<=2n;i++)
for(j=1;j<=n;j++)
s=s+B[i][j];
sum=s;
5.下列程序段的时间复杂度是____
i=1;
while(i<=n)
i=i*2;
6.在下面的程序段中,s=s+p;语句的执行次数为_________,p=p×j语句的执行次数为_________,该程序段的时间复杂度为________。
inti=0,s=0,p=1;
while(++i<=n)
{
for(j=1;j<=i;j++)
p=p×j;
s=s+p;
}
7.常见时间复杂度的量级有:
常数阶O(_________)、对数阶O(_________)、线性阶O(_________)、平方阶O(_________)和指数阶O(_________)。
三、判断题
1.算法和程序没有区别,所以在数据结构中二者是通用的。
第二章基本数据结构及其运算
一、选择题
1.数据结构的逻辑结构被形式地定义为(D,R),其中D是【
(1)】的有限集合,R是D上【
(2)】的有限集合。
(1)A.算法B.数据元素C.数据操作D.逻辑结构
(2)A.操作B.映像C.存储D.关系
2.在数据结构中,从逻辑上可以把数据结构分为【】。
A.动态结构和静态结构B.紧凑结构和非紧凑结构
C.线性结构和非线性结构D.内部结构和外部结构
3设进栈的输入序列是1,2,3,4,则【】不可能是其出栈序列。
A.1243B.2134
C.1432D.4312
4.设有一顺序栈s,元素s1,s2,s3,s4,s5,s6依次入栈,如果6个元素出栈的顺序是s2,s3,s4,s6,s5,s1,则栈的容量至少应该是【】。
A.2B.3C.5D.6
5.线性表若采用链表存储结构,要求内存中可用存储单元的地址【】。
A.必须是连续的B.部分必须是连续的
C.一定是不连续的D.连续不连续都可以
6.有如下定义structSnode{intdata;structSnode*next;}*p,*q;则将新结点q插入到单链表的p结点之后,下面的操作【】是正确的。
A.q=p->next;p->next=q->next;
B.p->next=q->next; q=p->next;
C.q->next=p->next; p->next=q;
D.p->next=q; q->next=p->next;
7.一个线性顺序表第一个元素的存储地址是2000,每个元素长度为4个字节,则第3个元素的起始存储地址为【】。
A.2008B.2000
C.2004D.2012
8.下列关于二叉树的叙述中,正确的是【】。
A.叶子结点总是比度为2的结点少一个
B.叶子结点总是比度为2的结点多一个
C.叶子结点数是度为2的结点数的两倍
D.度为2的结点数是度为1的结点数的两倍
9.某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是【】。
A.10B.8C.6D.4
10.一棵二叉树共有25个结点,其中5个是叶子结点,则度为1的结点数为【】。
A.16B.10C.6D.4
11.某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)【】。
A.3B.4C.6D.7
12.某二叉树有7个度为2的结点,则该二叉树中的叶子结点数是【】
A.10B.8C.4D.6
13.一棵深度为k的满二叉树中结点的个数是【】
A.2kB.2k-1C.2k-1D.2k-1-1
14.在以下的叙述中,正确的是【】。
A.线性表的线性存储结构优于链式存储结构
B.二维数组是它的每个数据元素为一个线性表的线性表
C.栈的操作方式是先进先出
D.队列的操作方式是先进后出
15.以下说法正确的是【】。
A.数据元素是数据的最小单位
B.数据项是数据的基本单位
C.数据结构是带有结构的各数据项的集合
D.数据结构是带有结构的数据元素的集合
16.线性表L=(a1,a2,…,ai,…,an),下列说法正确的是【】。
A.每个元素都有一个直接前驱和直接后继
B.线性表中至少要有一个元素
C.表中诸元素的排列顺序必须是由小到大或由大到小的
D.除第一个元素和最后一个元素外其余每个元素都有一个且仅有一个直接前驱和直接后继
17.对于顺序线性表的优缺点,以下说法错误的是【】。
A.无需为表示结点间的逻辑关系而增加额外的存储空间
B.可以方便地随机存取表中的任一结点
C.插入和删除操作较方便
D.由于顺序表要求占用连续的空间,存储分配只能预先进行(静态分配)
18.在含有n个结点的顺序存储的线性表中,在任一结点i前插入一个结点所需移动结点的次数为【】。
A.n/2B.iC.n-iD.n-i+1
19.在含有n个结点的顺序存储的线性表中,删除第i个结点所需移动结点的次数为【】。
A.n/2B.iC.n-iD.n-i+1
20.在含有n个结点的顺序存储的线性表中,在任一结点前插入一个结点所需移动结点的平均次数为【】。
A.nB.n/2C.(n-1)/2D.(n+1)/2
21.在含有n个结点的顺序存储的线性表中,删除一个结点所需移动结点的平均次数为【】。
A.nB.n/2C.(n-1)/2D.(n+1)/2
22.带头结点的单链表为空的条件是【】。
A.head=NULLB.head->next=NULLC.head->next=headD.head!
=NULL
23.在一个单链表中,若删除*p结点的后继结点,则执行【】。
A.q=p->next;p->next=q->next;free(q);
B.p=p->next;p->next=p->next->next;free(p);
C.p->next=p->next;free(p->next);
D.p=p->next->next;free(p->next);
24.循环链表的主要优点是【】。
A.不再需要头指针了
B.已知某个结点的位置后,容易找到它的直接前驱
C.在进行插入、删除操作时,能更好地保证链表不断开
D.从表中任一结点出发都能扫描到整个链表
25.在线性表的下列存储结构中,读取元素花费时间最少的是【】。
A.单链表B.双链表C.循环链表D.顺序表
26.设栈S和队列Q的初始状态为空,元素a1,a2,a3,a4,a5,a6依次通过栈S,一个元素出栈后即进入队列Q,若出队的顺序为a2,a4,a3,a6,a5,a1,则栈S的容量至少应该为【】。
A.2B.3C.5D.6
27.二维数组A[11,6]采用行序为主序方式存储,每个数据元素占4个存储单元,且A[0,0]的存储地址是1000,则A[8,4]的存储地址是【】。
A.1208B.1212C.1368D.1364
28.对矩阵压缩存储是为了【】。
A.方便运算B.节省空间C.方便存储D.提高运算速度
29.以下说法错误的是【】。
A.树形结构的特点是一个结点可以有多个直接前驱
B.线性结构中的一个结点至多只有一个直接后继
C.二叉树与树是两种不同的数据结构
D.树(及一切树形结构)是一种“分支层次’结构
30.以下说法错误的是【】。
A.二叉树可以是空集
B.二叉树的任一结点都有两棵子树
C.二叉树与树具有相同的树形结构
D、二叉树中任一结点的两棵子树有次序之分
31.一棵二叉树满足下列条件:
对任意结点,若存在左、右子树,则其值都小于它的左子树上所有结点的值,而大于右子树上所有结点的值。
现采用【】遍历方式就可以得到这棵二叉树所有结点的递减序列。
A.前序B.中序C.后序D.层次
32.对含有【】个结点的非空二叉树,采用任何一种遍历方式,其结点访问序列均相同。
A.0B.1C.2D.不存在这样的二叉树
33.已知某二叉树的后序遍历序列是deacb,中序遍历序列是deabc,它的前序遍历序列是【】。
A.acbedB.baedcC.dceabD.cedba
34.某二叉树的前序遍历的结点访问顺序是abdgcefh,中序遍历的结点访问顺序是dgbaechf,则其后序遍历的结点访问顺序是【】。
A.bdgcefhaB.gdbecfhaC.bdgechfaD.gdbehfca
35.在图6-2中的二叉树中,【】不是完全二叉树。
36.树最适合用来表示【】。
A.有序数据元素B.无序数据元素
C.元素之间具有分支层次关系的数据D.元素之间无联系的数据
37.在计算递归函数时,如不使用递归过程,则一般情况下必须借助于【】数据结构。
A.栈B.树C.双向队列D.顺序表
38.对于一个具有N个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小是【】。
A.NB.(N-1)*(N-1)C.N-1D.N*N
39.以下说法错误的是【】。
A.用邻接矩阵法存储图时,在不考虑压缩存储的情况下,所占用的存储空间大小只与图中结点个数有关,而与图的边数无关
B.邻接表法只能用于有向图的存储,而邻接矩阵法对于有向图和无向图的存储都适用
C.存储无向图的邻接矩阵是对称的,因此也可以只存储邻接矩阵的下(或上)三角部分
D.用邻接矩阵A表示图,判定任意两个结点Vi和Vj之间是否有长度为m的路径相连,则只要检查Am的第i行第j列的元素是否为0即可
二、填空题
1.通常,数据在计算机中的存储结构有_____存储结构、______存储结构、______存储结构和_____存储结构四种基本存储结构。
2.设循环队列的容量为70(序号为1~70),现经过一系列的入队与退队运算后,有:
.front=14,rear=21,循环队列中有______个元素
.front=23,rear=12,循环队列中有______个元素
3.单链表表示法的基本思想是用______表示结点间的逻辑关系。
4.栈的逻辑特点是______,队列的逻辑特点是______
5.______可以作为实现递归函数调用的一种数据结构。
6.在队列中,新插入的结点只能添加到______。
7.设用一维数组A[n]来表示一个栈,令A[0]为栈底。
用整型变量t来指示当前栈顶的位置,A[t]为栈顶元素。
往栈中压入一个新元素时,变量t的值______,从栈中弹出一个元素时,变量t的值______。
设空栈时,输入序列a,b,c经过push,pop,push,push,pop操作后,从栈中弹出的元素是_____。
8.树(及一切树形结构)是一种_____结构。
在树中,______结点没有直接前驱。
9.二叉树第i(i>0)层上至多有______个结点。
10.深度为k(k>0)的二叉树至多有______个结点。
11.二叉树通常有_______存储结构和_____存储结构两类存储结构。
12.对二叉链表的访问只能从______指针开始。
13.对无向图,其邻接矩阵是一个关于_______对称的矩阵。
14.请填空完成线性表在顺序存储下的插入运算程序:
在线性表v中第i个位置插入值为x的元素
structsqlist
{
intelem[MAXSIZE];
intlast;
};
voidinsert(sqlistv,inti,intx)
{
intk;
if(i<1||i>v.last+1)
printf(''插入位置不合适!
\n'');
elseif(v.last>=MAXSIZE-1)
printf(''线性表已满!
\n'');
else
{
for(k=v.last;k>=i;k--)
_______________________
v.elem[i]=x;
v.last++;
}
}
15.请填空完成线性表在顺序存储下的删除运算程序:
在线性表v中删除第i个位置的元素
structsqlist
{
intelem[MAXSIZE];
intlast;
};
voiddelete(sqlistv,inti)
{
intk;
if(i<1||i>v.last)
printf(''删除位置不合适!
\n'');
else
{
for(k=i+1;k<=v.last;k++)
v.elem[k-1]=v.elem[k];
_______________________
}
}
16.请填空完成栈在顺序存储下的入栈运算程序:
将值为x的元素入栈s
structstack
{intsData[MAXSIZE];
inttop;//栈顶指针,指向当前栈顶的位置
};
voidpush(structstacks,intx)//入栈运算
{
if(s.top==MAXSIZE-1)
{
printf(''栈满溢出\n'');
}
else
{
_______________________
s.sData[top]=x;
}
}
17.请填空完成栈在顺序存储下的出栈运算程序:
栈s出栈,并将出栈元素作为函数返回值返回
structstack
{intsData[MAXSIZE];
inttop;//栈顶指针,指向当前栈顶的位置
};
intpop(structstacks)//退(出)栈运算
{
intx;
if(s.top==-1)
{printf(''栈空溢出\n'');
exit
(1);
}
else
{
x=s.sData[top];
_______________________
}
returnx;
}
三、判断题
1.顺序存储的线性表可以随机存取。
2.顺序存储的线性表的插入和删除操作不需要付出很大的代价,因为平均每次操作只有近一半的元素需要移动。
3.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上不一定相邻。
4.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。
5.在单链表中,可以从头结点开始查找任何一个元素。
6.线性表的链式存储结构优于顺序存储结构。
7.在线性表的顺序存储结构中,插入和删除元素时,移动元素的个数与该元素的位置有关。
8.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。
9.顺序存储方式只能用于存储线性结构。
10.循环队列中元素个数为rear-front。
11.一个栈的输入序列是1,2,3,4,则在栈的输出序列中可以得到4,3,1,2.
12.若以链表作为栈的存储结构,则入栈需要判断栈是否满.
13.数组是同类型值的集合。
14.数组是一组连续的内存单元。
15.数组是一种复杂的数据结构,数组元素之间的关系既不是线性的也不是树形的。
16.插入和删除操作是数据结构中最基本的两种操作,所以这两种操作在数组中也经常使用。
17.使用三元组表示稀疏矩阵的元素,有时并不能节省存储空间。
18.二叉树是树的特殊形式。
19.树和二叉树之间最主要的差别是:
二叉树的结点的子树要区分为左右子树,即使在结点只有一棵子树的情况下也要明确指出该子树是左子树还是右子树。
20.用邻接矩阵法存储图时,所占用的存储空间大小仅与图中结点个数有关。
21.存储有向图的邻接矩阵一定是对称的。
四、简答应用题
1.有三个元素的进栈序列是1,2,3,举出此三个元素可能的出栈序列,并写出相应的进栈和出栈操作序列(假设以I和O表示进栈和出栈操作)。
2.试将下列稀疏矩阵A用三元组(三列二维表格)形式来表示,并写出对应的辅助向量POS和NUM。
3.试写出对下图所示的二叉树分别按前序、中序和后序遍历时得到的结点序列。
4.画出下图所示的树对应的二叉树。
5.请写出下图对应的关联矩阵R及求值矩阵V,结点A,B,C,D,E分别用1,2,3,4,5编号
6.逻辑结构与存储结构是什么关系?
7.描述以下三个概念的区别:
头指针,头结点,首元结点(第一个元素结点)。
8.何时选用顺序表,何时选用链表作为线性表的存储结构为宜?
9.如果有n个线性表同时共存,并且在处理过程中各表的长度会发生动态变化,线性表的总长度也会自动地改变。
在此情况下,应选择哪一种存储结构?
为什么?
10.若线性表的总数基本稳定,且很少进行插入、删除操作,但要求以最快的方式存取线性表的元素,应该用哪种存储结构?
为什么?
11.设计算法并写出程序,实现“计算带头结点的单链表的结点个数”。
12.已知一棵二叉树的中序序列和后序序列分别为BDCEAFHG和DECBHGFA,试画出这棵二叉树,并写出其前序遍历序列。
第三章查找与排序
一、选择题
1.对采用折半查找法进行查找操作的查找表,要求按【】方式进行存储。
A.顺序存储
B.链式存储
C.顺序存储且结点按关键字有序
D.链式存储且结点按关键字有序
2.设有序表的关键字序列为(1,4,6,10,18,35,42,53,67,71,78,84,92,99),当用折半查找法查找键值为35的结点时,经【】次比较后查找成功。
A.2B.3C.4D.6
3.分块查找的时间性能【】。
A.低于折半查找
B.高于顺序查找而低于折半查找
C.高于顺序查找
D.低于顺序查找而高于折半查找
4.设哈希函数为H(key)=key%7,一组关键字为(37,21,9,20,30,19,46),哈希表T的地址空间为0..6,用线性探测法解决冲突,依次将这组关键字插入T中,得到的哈希表为【】。
A.0123456
2120379463019
B.0123456
2146379301920
C.0123456
2119937304620
D.0123456
2037302146199
5.设有一个用线性探测法解决冲突得到的哈希表:
012345678910
1325801617614
哈希函数为H(key)=key%11,若要查找元素14,探测的次数是【】。
A.3B.6C.7D.9
6.在哈希函数H(key)=key%m中,一般来讲,m应取【】。
A.奇数B.偶数C.素数D.充分大的数
7.以下说法错误的是【】。
A.哈希法存储的基本思想是由关键字的值决定数据的存储地址
B.哈希表的结点中只包含数据元素自身的信息,不包含任何指针
C.哈希表的基本思想与顺序查找、对分查找和分块查找都不同
D.哈希表的查找效率主要取决于哈希表造表时选取的哈希函数和处理冲突的方法
8.在关键字随机分布的情况下,用二叉排序树的方法进行查找,其平均查找长度与【】查找方法量级相当。
A.分块B.顺序C.折半D.散列
9.在具有n个结点的二叉排序树中查找一个元素时,最坏情况下的时间复杂度为【】。
A.O(n)B.O
(1)C.O(log2n)D.O(n2)
10.哈希表的平均查找长度()。
A.与处理冲突的方法有关而与表的长度无关
B.与处理冲突的方法无关而与表的长度有关
C.与处理冲突的方法有关且与表的长度有关
D.与处理冲突的方法无关且与表的长度无关
11.有数据(49,32,40,6,45,12,56),从空二叉树开始依次插入数据形成二叉排序树,若希望高度最小,则应选择下列【】输入序列。
A.45,12,49,6,40,56,32
B.40,12,6,32,49,45,56
C.6,12,32,40,45,49,56
D.32,12,6,40,45,56,49
12.在一棵深度为h的具有n个元素的二叉排序树中,查找所有元素的最长查找长度为【】。
A.nB.log2nC.(h+1)/2D.h
13.【】方法是从未排序序列中依次取出元素与已经排序序列中的元素进行比较,将其放人已经排序序列的正确位置上。
A.双向冒泡排序B.插入排序C.冒泡排序D.选择排序
14.【】方法是从未排序序列中挑选元素,并将其依次放入已经排序序列的一端。
A.双向冒泡排序B.插入排序C.冒泡排序D.选择排序
二、填空题
1.索引顺序表上的查找分两个阶段:
一、______________;二、____________。
该查找方法称为________查找。
2.二叉排序树是一种特殊的、增加了限制条件的二叉树,其限制条件是任一结点的键值___于其左孩子(及其子孙)的键值且____于其右孩子(及其