数据结构复习资料.docx
- 文档编号:9743341
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:17
- 大小:53.07KB
数据结构复习资料.docx
《数据结构复习资料.docx》由会员分享,可在线阅读,更多相关《数据结构复习资料.docx(17页珍藏版)》请在冰豆网上搜索。
数据结构复习资料
第一章
一、填空题
1_____是数据的基本单位,.........是具有独立含义的最小标识单位。
3数据之间的关系(逻辑结构)有四种——、——、——、——。
4数据的存储结构包括.......................、...........................
二、问答题
1.什么是数据结构?
什么是数据类型?
2.叙述算法的定义与特性。
3. 叙述算法的时间复杂度。
三、判断题(在各题后填写“√”或“×”)
1. 线性结构只能用顺序结构来存放,非线性结构只能用非顺序结构来存放。
( )
2.下列几种数量级从小到大的排列顺序为:
O
(1)、O(logn)、O(n)、O(nlogn)、O(n2)、O(n3)、O(2n)。
()
四、设n为正整数,利用大O记号,将该程序段的执行时间表示为n的函数,则下列程序段的时间复杂度可表示为
(1)(....)
(2)(....)
1)floatsum1(intn){
/*计算1!
+2!
+…+n!
*/
p=1;sum1=0;
for(i=1;i<=n;++i){
p=p*i;sum1=sum1+p
}
}/*sum1*/
(2)floatsum2(intn){
/*计算1!
+2!
+…+n!
*/
sum2=0;
for(i=1;i<=n;++i){
p=1;
for(j=1;j<=i;++j)p=p*j;
sum2=sum2+p;
}
}/*sum2*/
第二章
一、判断
1.线性表在顺序存储时,逻辑上相邻的元素未必在存储的物理位置次序上相邻。
()
2.顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。
()
二、填空
1.在单链表中,指针p所指结点为最后一个结点的条件是。
2.在单链的循环链表中,指针p所指结点为最后一个结点的条件是。
三、选择
1.、在一个长度为n的顺序表的表尾插入一个新元素的渐进时间复杂度为()
A.O(n)B.O
(1)C.O(n2)D.O(log2n)
2.线性链表不具有的特点是()。
A.随机访问B.不必事先估计所需存储空间大小
C.插入与删除时不必移动元素D.所需空间与线性表长度成正比
3.线性表采用链式存储时,其地址()。
A必须是连续的B一定是不连续的
C部分地址必须是连续的D连续与否均可以.
4、下列哪一个程序片段是在链表中间插入一个结点。
(假设新结点为NEW,欲插入在Pointer结点之后)
ANEW->next=PointerBNEW->next=Pointer->next
Pointer=NEWPointer->next=NEW
CPointer->next=NEW->nextD以上皆非
NEW->next=Pointer
5.在单链表中,增加头结点的目的是()A.使单链表至少有一结点B.标志表中首结点位置
C.方便运算的实现D.说明单链表是线性表的链式存储实现
6.线性表L在情况下适用于使用链式结构实现。
()
(A)需经常修改L中的结点值(B)需不断对L进行删除插入
(C)L中含有大量的结点(D)L中结点结构复杂
7、向一个有127个元素原顺序表中插入一个新元素并保存原来顺序不变,平均要移动()个元素。
A、8B、63.5C、63D、7
三、算法设计
1设顺序表L中的数据元素递增有序。
试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。
2分别写出算法将单链表和顺序表就地逆置(用尽可能少的附加空间在原存储出空间内将将线性表a1,a2,a3,…an逆置为an…a3,a2,a1)。
*3删除元素递增排列的链表L中所有值相同的元素。
第三章习题
1. 按图3.1(b)所示铁道(两侧铁道均为单向行驶道)进行车厢调度,回答:
⑴如进站的车厢序列为123,则可能得到的出站车厢序列是什么?
⑵如进站的车厢序列为123456,能否得到435612和135426的出站序列,并说明原因。
(即写出以“S”表示进栈、以“X”表示出栈的栈操作序列)。
2. 设队列中有A、B、C、D、E这5个元素,其中队首元素为A。
如果对这个队列重复执行下列4步操作:
(1) 输出队首元素;
(2) 把队首元素值插入到队尾;
(3) 删除队首元素;
(4) 再次删除队首元素。
直到队列成为空队列为止,得到输出序列:
(1) A、C、E、C、C
(2)A、C、E
(3) A、C、E、C、C、C (4)A、C、E、C
3. 给出栈的两种存储结构形式名称,在这两种栈的存储结构中如何判别栈空与栈满?
4. 按照四则运算加、减、乘、除和幂运算(↑)优先关系的惯例,画出对下列算术表达式求值时操作数栈和运算符栈的变化过程:
A-B*C/D+E↑F
5. 要求循环队列不损失一个空间全部都能得到利用,设置一个标志域tag,以tag为0或1来区分头尾指针相同时的队列状态的空与满,请编写与此结构相应的入队与出队算法。
6. 简述以下算法的功能(其中栈和队列的元素类型均为int):
(1)voidproc_1(StackS)
{inti,n,A[255];
n=0;
while(!
EmptyStack(S))
{n++; Pop(&S, &A[n]);}
for(i=1; i<=n; i++)
Push(&S, A[i]);
}
(2)voidproc_2(StackS, inte)
{StackT; intd;
InitStack(&T);
while(!
EmptyStack(S))
{Pop(&S, &d);
if(d!
=e)Push(&T, d);
}
while(!
EmptyStack(T))
{Pop(&T, &d);
Push(&S, d);
}
}
(3)voidproc_3(Queue *Q)
{StackS; intd;
InitStack(&S);
while(!
EmptyQueue(*Q))
{
DeleteQueue(Q, &d);
Push(&S, d);
}
while(!
EmptyStack(S))
{Pop(&S, &d);
EnterQueue(Q,d)
}
}
第四章
1.简述空串与空格串、主串与子串每对术语的区别?
2.两个字符串相等的充要条件是什么?
3.串有哪几种存储结构?
4.已知两个串:
s1=”fgcdbcabcadr”,s2=”abc”,试求两个串的长度,判断串s2是否是串s1的子串,并指出串s2在串s1中的位置。
5.已知:
s1=〃I’mastudent〃,s2=〃student〃,s3=〃teacher〃,试求下列各运算的结果:
Index(s1,s2,1);SubString(sub,s,7,7);
Strlength(s1);
Concat(s2,s3);
StrDelete(s1,4,10);
6.如下陈述中正确的是()。
A.串是一种特殊的线性表B.串的长度必须大于零
C.串中元素只能是字母D.空串就是空白串
7.模式串t=‘abcaabbcabcaabdab’,该模式串的next数组的值为()。
A.01112211123456712
B.01112121123456112
C.01112231123456712
D.01110013101100701
*7.编写算法,统计串S中字符的种类和个数(定长顺序存储).
提示:
用结构数组T存储统计结果
typedefstruct{
charch;
intnum;
}mytype;
mytypeT[MAXSIZE];
第五章
一、选择题
5-1设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,问A[3][3](10)存放在什么位置()脚注(10)表示用10进制表示。
A)676B)650C)600D)692
【解析】
设数组元素A[i][j]存放在起始地址为Loc(i,j)的存储单元中。
∵Loc(2,2)=Loc(0,0)+2*n+2=644+2*n+2=676.
∴n=(676-2-644)/2=15
∴Loc(3,3)=Loc(0,0)+3*15+3=644+45+3=692.
5-2如下是一个稀疏矩阵的三元组法存储表示和基于此表示所得出的相关叙述
I.该稀疏矩阵有5行II.该稀疏矩阵有4列
III.该稀疏矩阵有6个非0元素
这些叙述中______是正确的。
A)仅IB)I和IIC)仅IIID)全部
【解析】本题考点是稀疏矩阵的三元组法存储。
对稀疏矩阵的每一个非零元素,用一个三元组来描述。
用线性表中的一个结点来对应稀疏矩阵的一个非零元素,每个结点包括三个域(行下标,列下标,值),结点之间的次序按矩阵的行优先顺列。
采用线性表的顺序存储结构来存储这些三元组,构成三元组表。
本题中,从该稀疏矩阵的三元组法存储表示中,只能判断该矩阵有6个非0元素,不能判断稀疏矩阵总的行数和列数。
5-3设有下三角矩阵A[0..10,0..10],按行优先顺序存放其非零元素,每个非零元素占两个字节,存放的基地址为100,则元素A[5,5]的存放地址为()。
A)110B)120C)130D)140
【解析】本题的考点是多维数组的顺序存储。
按行优先顺序存储下三角矩阵Ann的非零元素,可以得到如下的序列:
a00,a10,a11,a20,a21,a22,…..,an0,an1,an3,….,ann,将该序列顺序存储在内存中,第0行到第i-1行的元素个数为1+2+…+(i)=i′(i+1)/2,假设a11地址是Loc(a11),每个元素的长度为k,非零aij(1≤j≤i≤n)的是第i行的第j个元素,因此其地址是:
Loc(aij)=Loc(a00)+(i′(i+1)/2+j)×k。
因此A[5,5]的存放地址=100+(5×6/2+5)×2=140。
5-4按行优先顺序存储下三角矩阵的非零元素,则计算非零元素aij(1≤j≤i≤n)的地址的公式为______。
A)LOC(aij)=LOC(a11)+i×(i+1)/2+j
B)LOC(aij)=LOC(a11)+i×(i+1)/2+(j-1)
C)LOC(aij)=LOC(a11)+i×(i-1)/2+j
D)LOC(aij)=LOC(a11)+i×(i-1)/2+(j-1)
【解析】本题的考点是多维数组的顺序存储。
按行优先顺序存储下三角矩阵Ann的非零元素,可以得到如下的序列:
a11,a21,a22,a31,a32,a33,…..,an1,an2,an3,….,ann,将该序列顺序存储在内存中,第1行到第i-1行的元素个数为1+2+…+(i-1)=i′(i-1)/2,假设a11地址是Loc(a11),非零aij(1≤j≤i≤n)的是第i行的第j个元素,因此其地址是:
Loc(aij)=Loc(a11)+i′(i-1)/2+j-1。
5-5二维数组A[0..8,0..9],其每个元素占2字节,从首地址400开始,按行优先顺序存放,则元素A[8,5]的存储地址为。
A)570B)506C)410D)482
【解析】本题的考点是二维数组的存储。
二维数组采用顺序存储结构,按行优先顺序,且下标从0开始,求数据元素的地址用下述公式:
loc(aij)=loc(a11)+(i*n+j)*l,其中,n和m分别为数组的每行和每列的元素个数,l为每个数组元素所占用的存储空间单元个数。
因此A[8,5]的地址是400+(8×10+5)×2=570。
二、简答题
5-1设二维数组A5*6的每个元素占4个字节,已知Loc(a00)=1000,A共占多少个字节?
A的终端结点a45的起始地址为多少?
按行和按列优先存储时,a25的起始地址分别为多少?
【解析】A共占的字节数为:
5*6*4=120
a45的起始地址为:
Loc(a00)+(4*6+5)*4=1000+116=1116
按行优先存储时,a25的起始地址为:
Loc(a00)+(2*6+5)*4=1000+68=1068
按列优先存储时,a25的起始地址为:
Loc(a00)+(5*5+2)*4=1000+108=1108
5-2利用广义表的head和tail操作写出函数表达式,把以下各题中的单元素banana从广义表中分离出来:
(1)L1(apple,pear,banana,orange)
(2)L2((apple,pear),(banana,orange))
(3)L3(((apple),(pear),(banana),(orange)))
(4)L4((((apple))),((pear)),(banana),orange)
(5)L5((((apple),pear),banana),orange)
(6)L6(apple,(pear,(banana),orange))
【解析】
(1)Head(Tail(Tail(L1)))
(2)Head(Head(Tail(L2)))
(3)Head(Head(Tail(Tail(Head(L3)))))
(4)Head(Head(Tail(Tail(L4))))
(5)Head(Tail(Head(L5)))
(6)Head(Head(Tail(Head(Tail(L6)))))
5-3画出下列广义表的图形表示和它们的存储表示:
(1)D(A(c),B(e),C(a,L(b,c,d)))
(2)J1(J2(J1,a,J3(J1)),J3(J1))
【解析】
(1)D(A(c),B(e),C(a,L(b,c,d)))
(2)J1(J2(J1,a,J3(J1)),J3(J1))
三、应用题
5-1如果矩阵A中存在这样的一个元素A[i][j]满足条件:
A[i][j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。
编写一个程序计算出m*n的矩阵A的所有马鞍点。
【解析】
voidGet_Saddle(intA[m][n])//求矩阵A中的马鞍点
{
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 复习资料