期末考试复习范围及答案文档格式.docx
《期末考试复习范围及答案文档格式.docx》由会员分享,可在线阅读,更多相关《期末考试复习范围及答案文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
(1)算法的时间复杂度要通过算法中的基本语句的执行次数来确定f。
数量级
(2)每种数据结构都具备三个基本操作:
插入,删除和查找。
F算法的三种基本操作
(3)所谓数据的逻辑结构指的是数据之间的逻辑关系。
F的整体
(4)逻辑结构与数据元素本身的内容和形式无关。
T
(5)基于某种逻辑结构之上的基本操作.其实现是惟一的。
F以其存储结构决定的
4.分析以下各程序段,并用大O记号表示其执行时间。
(1)i=1;
k=0;
while(i<
n-1)
{
k=k+10*i;
i++;
}
O(n)
(2)i=l;
k=0;
do
}while(i<
=n);
(3)i=l;
j=0;
while(i+j<
=n)
if(i>
j)
j++;
else
o(n)
(4)y=0;
while((y+1)*(y+1)<
y=y+l;
O(n^1/2)
(5)for(i=1;
i<
=n;
i++)
for(j=1;
j<
=i;
j++)
for(k=1;
k<
=j;
k++)
x++;
o(n^3)
参考答案:
(1)数据元素
(2)数据项,数据元素【分析】数据结构指的是数据元素以及数据元素之间的关系。
(3)集合,线性结构,树结构,图结构
(4)顺序存储结构,链接存储结构,数据元素,数据元素之间的关系
(5)有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性
(6)自然语言,程序设计语言,流程图,伪代码,伪代码
(7)问题规模
(8)O
(1),O(nlog2n)【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。
(9)数据元素之间的关系合适的逻辑结构存储这些数据为完成数据操作所设计的算法。
(10)正确性可读性健壮性效率和低存储容量需求
(1)错。
时间复杂度要通过算法中基本语句执行次数的数量级来确定。
(2)错。
如数组就没有插人和删除操作。
注意,题目中是每种数据结构。
(3)错。
是数据之间的逻辑关系的整体。
(4)对。
因此逻辑结构是数据组织的主要方面。
(5)【解答】错。
基本操作的实现是基于某种存储结构设计的,因而不是惟一的。
【解答】
(1)基本语句是k=k+10*i,共执行了n一2次,所以T(n)=O(n)。
(2)基本语句是k=k+10*i,共执行了n次,所以T(n)=O(n)。
(3)分析条件语句,每循环一次,i+j整体加1,共循环n次,所以T(n)=O(n)。
(4)设循环体共执行T(n)次,每循环一次,循环变量y加l,最终T(n)=y,即:
(T(n)十1)2≤n,所以T(n)=O(n1/2)。
nij
(5)x++是基本语句,所以T(n)=∑∑∑1=O(n3)。
i=1j=1k=1
第2章线性表
2.选择题
(1)线性表的顺序存储结构是一种(A)的存储结构,线性表的链接存储结构是一种(B)的存储结构。
A随机存取B顺序存取C索引存取D散列存取
(2)线性表采用链接存储时,其地址(D)。
A必须是连续的B部分地址必须是连续的
C一定是不连续的D连续与否均可以
(3)单循环链表的主要优点是(B)。
A不再需要头指针了
B从表中任一结点出发都能扫描到整个链表
C已知某个结点的位置后,能够容易找到它的直接前驱
D在进行插入、删除操作时,能更好地保证链表不断开
(4)链表不具有的特点是(A)。
A可随机访问任一元素B插入、删除不须要移动元素
C不必事先估计存储空间D所需空间与线性表长度成正比
(5)若某线性表中最常用的操作是取第i个元素和查找第i个元素的前趋,则采用(A)存储方法最节省时间。
A顺序表B单链表C双链表D单循环链表
(6)若链表中最常用的操作是在最后一个结点之后插入一个结点和删除第一个结点,则采用(D)存储方法最节省时间。
A单链表B带头指针的单循环链表
C双链表D带尾指针的单循环链表
(7)若链表中最常用的操作是在最后一个结点之后插入一个结点和删除最后一个结点,则采用(B)存储方法最节省时间。
A单链表B循环双链表
C单循环链表D带尾指针的单循环链表
(8)在具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是(B)。
AO
(1)BO(n)CO(n2)DO(nlog2n)
(9)对于n个元素组成的线性表,建立一个有序单链表的时间复杂度是(C)。
AO
(1)BO(n)CO(n2)DO(nlog2n)
(10)使用双链表存储线性表,其优点是可以(B)。
A提高查找速度B更方便数据的插入和删除
C节约存储空间D很快回收存储空间
(11)在一个单链表中,已知q所指结点是p所指结点的直接前驱,若在q和p之间插入s所指结点,则执行(B)操作。
As->
next=p->
next;
p->
next=s;
Bq->
s->
next=p;
Cp->
next=s->
Dp->
next=q;
(12)在循环双链表的p所指结点后插入s所指结点的操作是(D)。
Ap->
prior=P;
next->
prior=s;
Bp->
next=s;
p->
prior=s;
s->
prior=p;
Cs->
prior=p;
next=s;
prior=s;
Ds->
next;
prior=s;
(13)下面哪个特点不是线性表顺序存储结构的优点D
A.可以方便地随机存取线性表中任一个数据元素
B.存取任一数据元素所花费的时间相同
C.存储空间连续,不必增加额外存储空间来保存前驱或后继元素的地址
D.插入或删除数据元素的操作方便
(14)下面哪个特点不是线性表顺序存储结构的缺点B
A.插入数据元素的操作平均花费时间较多
B.存取数据元素所花费的时间较多
C.线性表的容量难于扩充
D.删除数据元素的操作平均花费时间较多
(15)指出下面不正确的说法B
A.在线性表的链式存储结构中,逻辑上相邻的两个元素在物理位置上不相邻。
B.线性表的链式存储结构比线性存储结构所占的存储空间少。
C.在线性表的链式存储结构中存储器的碎片可得到充分利用
D.线性表的链式存储结构只能顺序存取数据元素,不能随机存取数据元素
(1)线性表的逻辑顺序和存储顺序总是一致的。
F
(2)线性表的顺序存储结构优于链接存储结构。
(3)设p,q是指针,若p=q,则*p=*q。
(4)线性结构的基本特征是:
每个元素有且仅有一个直接前驱和一个直接后继。
F头元素
没有前驱,最后没有后继
(5)单链表中,要取得某个元素,只要知道该元素所在结点的地址即可,因此单链表是随机存取结构。
F单列表是顺序存储结构
参考答案
(1)A,B
(2)D线性表的链接存储是用一组任意的存储单元存储线性表的数据元索,这组存储单元可以连续,也可以不连续,甚至可以零散分布在内存中任意位置。
(3)B(4)A
(5)A【分析】线性表中最常用的操作是取第i个元素,所以,应选择随机存取结构,即顺序表,同时在顺序表中查找第i个元素的前趋也很方便。
单链表和单循环链表既不能实现随机存取,查找第i个元素的前趋也不方便,双链表虽然能快速查找第i个元素的前趋,但不能实现随机存取。
(6)D【分析】在链表中的最后一个结点之后插入一个结点要知道终端结点的地址,所以,单链表、带头指针的单循环链表、双链表都不合适,考虑在带尾指针的单循环链表中删除第一个结点,其时间性能是O
(1),所以,答案是D。
(7)B【分析】在链表中的最后一个结点之后插入一个结点要知道终端结点的地址,所以,单链表、单循环链表都不合适,删除最后一个结点要知道终端结点的前驱结点的地址,所以,带尾指针的单循环链表不合适,而循环双链表满足条件。
(8)B【分析】首先应顺序查找新结点在单链表中的位置。
(9)C【分析】该算法要将n个元素依次插入到有序单链表中,而插入每个元素需O(n)。
(10)B【分析】在链表中一般只能进行顺序查找,所以,双链表并不能提高查找速度,因为双链表中有两个指针域,显然不能节约存储空间,对于动态存储分配,回收存储空间的速度是一样的。
由于双链表具有对称性,所以,其插入和删除操作更加方便。
(11)B【分析】注意此题是在q和p之间插入新结点,所以,不用考虑修改指针的顺序。
(12)D【分析】在链表中,对指针的修改必须保持线性表的逻辑关系,否则,将违背线性表的逻辑特征,图2-3给出备选答案C和D的图解。
图2-3双链表插入操作修改指针操作示意图
(13)D(14)B(15)B
顺序表的逻辑顺序和存储顺序一致,链表的逻辑顺序和存储顺序不一定一致。
两种存储结构各有优缺点。
p=q只能表示p和q指向同一起始地址,而所指类型则不一定相同。
(4)错。
每个元素最多只有一个直接前驱和一个直接后继,第一个元素没有前驱,最后一个元素没有后继。
(5)错。
要找到该结点的地址,必须从头指针开始查找,所以单链表是顺序存取结构。
第3章栈和队列
(1)若一个栈的输入序列是l,2,3,…,n,输出序列的第一个元素是n,则第i个输出元素是(D)。
A不确定Bn-iCn-i-lDn-i+1
(2)设栈s和队列Q的初始状态为空,元素e1,e2,e3,e4,e5,e6依次通过栈s,一个元素出栈后即进入队列Q,若6个元素出队的顺序是e2,e4,e3,e6,e5,e1,则栈S的容量至少应该是(C)。
A6B4C3D2
(3)一个栈的入栈序列是1,2,3,4,5,则栈的不可能的输出序列是(C)。
A5,4,3,2,1B4,5,3,2,1C4,3,5,1,2D1,2,3,4,5
(4)设计一个判别表达式中左右括号是否配对的算法,采用(B)数据结构最佳。
A顺序表B栈C队列D链表
(5)在解决计算机主机与打印机之间速度不匹配问题时通常设置一个打印缓冲区,该缓冲区应该是一个(B)结构。
A栈B队列C数组D线性表
(6)一个队列的入队顺序是1,2,3,4,则队列的输出顺序是(B)。
A4,3,2,1B1,2,3,4C1,4,3,2D3,2,4,1
(7)栈和队列的主要区别在于(D)。
A它们的逻辑结构不一样B它们的存储结构不一样
C所包含的运算不一样D插入、删除运算的限定不一样
(8)设数组S[n]作为两个栈S1和S2的存储空间,对任何一个栈只有当S[n]全满时才不能进行进栈操作。
为这两个栈分配空间的最佳方案是(A)。
AS1的栈底位置为0,S2的栈底位置为n-1
BS1的栈底位置为0,S2的栈底位置为n/2
CS1的栈底位置为0,S2的栈底位置为n
DS1的栈底位置为0,S2的栈底位置为1
(9)指出下面有关栈和队列的不正确说法。
D
A.从逻辑结构角度来看,栈和队列是线性表
B.从操作角度来看,栈和队列的基本操作是线性表操作的子集
C.对于进栈和出栈操作都是在栈顶一端进行
D.对于队列操作而言,是在队头进队,在队尾出队
(10)如果进栈的数据元素序列为1、2、3、4、5、6,不能得到的出栈序列是D
A.1、2、3、4、5、6B.6、5、4、3、2、1
C.3、2、1、4、5、6D.4、3、5、6、1、2
(11)一个栈的进栈序列是a,b,c,d,e,则栈的不可能的输出序列是C
A.edcbaB.decbaC.dceabD.abcde
(12)若已知一个栈的进栈序列是1,2,3,……,n,其输出序列为p1,p2,p3,…,pn,若p1=3,则p2为A
A.可能是2B.一定是2C.可能是1D.一定是1
(13)若循环队列用数组A[0,m-1]存放其元素值,已知其头尾指针分别是front和rear,则当前队列中的元素个数是A
A.(rear–front+m)%mB.rear-front+1C.rear-front-1D.rear-front
(1)有n个元素依次进栈,则出栈序列有(n-1)/2种。
F
(2)栈可以作为实现过程调用的一种数据结构。
T
(3)在栈满的情况下不能做进栈操作,否则将产生“上溢”。
(4)在循环队列中,front指向队头元素的前一个位置,rear指向队尾元素的位置,则队满的条件是front=rear。
4.设有一个栈.元素进栈的次序为A,B,C,D,E,能否得到如下出栈序列。
若能,请写出操作序列,若不能,请说明原因。
(1)C,E,A,B,D不能
(2)C,B,A,D,E能
5.举例说明顺序队列的“假溢出”现象。
6.在操作序列push
(1)、push
(2)、pop、push(5)、push(7)、pop、push(6)之后,栈顶元素和栈底元素分别是什么?
(push(k)表示整数k入栈,pop表示栈顶元素出栈。
)(分段图示说明)
(1)D【分析】此时,输出序列一定是输入序列的逆序。
(2)C【分析】由于队列具有先进先出性,所以,此题中队列形同虚设,即出栈的顺序也是e2,e4,e3,e6,e5,e1。
(3)C【分析】此题有一个技巧:
在输出序列中任意元素后面不能出现比该元素小并且是升序(指的是元素的序号)的两个元素。
(4)B【分析】每个右括号与它前面的最后一个没有匹配的左括号配对,因此具有后进先出性。
(5)B【分析】先进入打印缓冲区的文件先被打印,因此具有先进先出性。
(6)B
【分析】队列的入队顺序和出队顺序总是一致的。
(7)D【分析】栈和队列的逻辑结构都是线性的,都有顺序存储和链接存储,有可能包含的运算不一样,但不是主要区别,任何数据结构在针对具体问题时包含的运算都可能不同。
(8)A【分析】两栈共享空间首先两个栈是相向增长的,栈底应该分别指向两个栈中的第一
个元素的位置,并注意c++中的数组下标是从0开始的。
(9)D(10)D(11)C(12)A(13)A
(1)错。
应该有(2n)!
/((n+1)(n!
)2)种。
(2)对。
只要操作满足后进先出性,都可以采用栈作为辅助数据结构。
(3)对。
(4)错。
这是队空的判定条件,在循环队列中要将队空和队满的判定条件区别开。
4.
(1)不能。
因为在C,E出栈的情况下,A一定在栈中,而且在B的下面,不可能先于B出栈。
(2)可以。
设I为进栈操作,O为出栈操作.则其操作序列为IIIOOOIOIO。
5.假设有一个顺序队列,如图3-1所示,队尾指针rear=4,队头指针front=1,如果再有元素入队,就会产生“上溢”,此时的”上溢”又称为“假溢出”,因为队列并不是真的溢出了,存储队列的数组中还有2个存储单元空闲,其下标分别为0和l。
图3-1顺序队列的假溢出
6.栈顶元素为6,栈底元素为1。
其执行过程如图3-2所示。
图3-2栈的执行过程示意图
第4章串
(1)串是一种特殊的线性表,其特殊性体现在(数据元素的类型是一个字符)。
(2)两个串相等的充分必要条件是(长度相同且对应位置的字符相同)。
(3)串的静态存储结构,即顺序存储结构,其有(紧凑格式)和(非紧凑格式)两种存储方式。
(4)串的链式存储结构有(链式存储结构)和(堆结构)两种存储方式。
(1)空串与空格串是相同的。
(2)如果一个串中的所有字符均在另一个串中出现,那么则说明前者是后者的子串。
1.填空题:
(1)数据元素的类型是一个字符
(2)长度相同且对应位置的字符相等【分析】例如’"
abc"
≠"
abc"
"
bca"
。
(3)紧凑格式非紧凑格式
(4)链式存储结构堆结构
3.判断题:
(1)错。
空串的长度为零,而空格串的长度不为0,其长度是串中空格的个数.
(2)错
第5章数组和广义表
(1)数组通常只有两种运算:
(给定下标,存取相应元素)和(给定下标,修改相应的元素),这决定了数组通常采用(顺序存储)结构来实现存储。
(2)二维数组A中行下标从10到20,列下标从5到10,按行优先存储,每个元素占4个存储单元。
A[10][5]的存储地址是1000,则元索A[15][10]的存储地址是(1140)。
(3)设有一个10阶的对称矩阵A采用压缩存储,A[0][0]为第一个元素,其存储地址为d,每个元素占1个存储单元,则元素A[8][5]的存储地址为(d+41)。
(4)(三元组线性表)是稀疏矩阵压缩存储方法之一。
(5)广义表((a),(((b),c)),(d))的长度是(3),深度是(4),表头是((a)),表尾是(((((b),c)),(d)))。
(6)已知广义表LS=(a,(b,c,d),e),用Head和Tail函数取出LS中原子b的运算是(Head(Head(Tail(LS))))。
(7)存储n维数组的存储规则是,以行为主序的存储可以规定为(最右的下标优先,从右向左
);
以列为主序的存储可以规定为(最左的下标优先,从左到右
)。
(8)矩阵的压缩存储是指(对多个值相同的元素只分配一个存储空间且对零元素不分配存储空间)
(9)设有二维数组A(6*8),每个元素占6个字节存储,实现存放,A00的起始地址为1000,则数组A的存储量为(288),按行优先存放时,元素A14的起始地址是(1072)。
(10)HEAD(((a,b),(c,d)))的值是(((a,b),(c,d)))。
(11)HEAD(TAIL(((a,b),(c,d))))的值是((c,d))。
(12)设对称矩阵R压缩存储为一维数组,则元素R32对应一维数据的下标为(8)。
(1)数组是一种复杂的数据结构,数组元素之间的关系既不是线性的,也不是树形的。
(2)使用三元组表存储稀疏矩阵的元素,有时并不能节省存储空间。
T
(3)稀疏矩阵压缩存储后,必会失去随机存取功能。
(4)线性表可以看成是广义表的特例,如果广义表中的每个元素都是原子元素,则广义表便成为线性表。
(5)若一个广义表的表头为空表,则此广义表也为空表。
4.一个稀疏矩阵如图5-1所示,写出对应的三元组顺序表存储表示。
及C语言描述的存储结构定义
图5-1稀疏矩阵
(1)给定下标,存取相应的数据元素;
给定下标,修改相应的数据元素;
顺序存储
【分析】数组是一个具有固定格式和数量的数据集合,在数组上一般不能做插入、删除元素的操作。
除了初始化和销毁之外,在数组中通常只有存取和修改两种操作。
(2)1140【分析】数组A中每行共有6个元素,元素A[15][10]的前面共存储了(15-10)×
6+5个元素,每个元素占4个存储单元,所以,其存储地址是1000+140=1140。
(3)d+4l【分析】元素A[8][5]的前面共存储了(1+2+…+8)+5=41个元素。
(4)三元组线性表
(5)3,4,(a),((((b),c)),(d))
(6)Head(Head(Tail(LS)))
(7)最右的下标优先,从右向左;
最左的下标优先,从左到右(8)为多个值相同的元只分配一个存储空间且对零元不分配空间