数据结构期自测卷.docx
《数据结构期自测卷.docx》由会员分享,可在线阅读,更多相关《数据结构期自测卷.docx(29页珍藏版)》请在冰豆网上搜索。
数据结构期自测卷
数据结构A、B卷与详细解答
《数据结构》试卷A(开一页)
站点________专业年级________姓名_________学号_________成绩_________
一、填空题(每空1分,共22分)
1、数据结构被形式地定义为(D,R),其中D是的有限集合,R是D上的有限集合。
2、一个算法的效率可分为效率和效率。
3、向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动________个元素。
4、在一个循环队列中,队首指针指向队首元素的位置。
5、在具有n个单元的循环队列中,队满时共有个元素。
6、向栈中压入元素的操作是先,后。
7、称为空串;称为空白串。
8、假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。
已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为;末尾元素A57的第一个字节地址为;若按行存储时,元素A14的第一个字节地址为;若按列存储时,元素A47的第一个字节地址为。
9、设一棵完全二叉树具有1000个结点,则此完全二叉树有个叶子结点,有个度为2的结点,有个结点只有非空左子树,有个结点只有非空右子树。
10、线性有序表(a1,a2,a3,…,a256)是从小到大排列的,对一个给定的值k,用二分法检索表中与k相等的元素,在查找不成功的情况下,最多需要检索次。
设有100个结点,用二分法查找时,最大比较次数是。
11、散列法存储的基本思想是由决定数据的存储地址。
二、判断题(每题1分,共10分)
()1.队是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。
()2.二叉树中所有结点个数是2k-1-1,其中k是树的深度。
()3.栈和队列的存储方式既可是顺序方式,也可是链接方式。
()4.二叉树中所有结点,如果不存在非空左子树,则不存在非空右子树。
()5.对于一棵非空二叉树,它的根结点作为第一层,则它的第i层上最多能有2i-1个结点。
()6.链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动将后续各个单元向前移动。
()7.用二叉链表法(link-rlink)存储包含n个结点的二叉树,结点的2n个指针区域中有n+1个为空指针。
()8.具有12个结点的完全二叉树有5个度为2的结点。
()9.线性表在顺序存储时,逻辑上相邻的元素未必在存储的物理位置次序上相邻。
()10.顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。
三、单项选择题(每小题2分,共18分)
()1.数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为:
(A)存储结构(B)逻辑结构(C)顺序存储结构(D)链式存储结构
()2.一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是
(A)110(B)108(C)100(D)120
()3.在n个结点的顺序表中,算法的时间复杂度是O
(1)的操作是:
(A)访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)
(B)在第i个结点后插入一个新结点(1≤i≤n)
(C)删除第i个结点(1≤i≤n)(D)将n个结点从小到大排序
()4.向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动个元素
(A)8(B)63.5(C)63(D)7
()5判定一个队列QU(最多元素为m0)为满队列的条件是
A.QU->rear-QU->front==m0B.QU->rear-QU->front-1==m0C.QU->front==QU->rearD.QU->front==QU->rear+1
()6.链表是一种采用存储结构存储的线性表;
(A)顺序(B)链式(C)星式(D)网状
()7.线性表若采用链式存储结构时,要求内存中可用存储单元的地址:
(A)必须是连续的(B)部分地址必须是连续的
(C)一定是不连续的(D)连续或不连续都可以
()8.线性表L在情况下适用于使用链式结构实现。
(A)需经常修改L中的结点值(B)需不断对L进行删除插入
(C)L中含有大量的结点(D)L中结点结构复杂
()9.若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为
A.iB.n=iC.n-i+1D.不确定
四、简答题(10分)
1、已知如图所示的有向图,请给出该图的:
(1)
顶点
1
2
3
4
5
6
入度
出度
每个顶点的入/出度;
(2)邻接矩阵;
(3)邻接表;
(4)逆邻接表。
2、线性表具有两种存储方式,即顺序方式和链接方式。
现有一个具有五个元素的线性表L={23,17,47,05,31},若它以链接方式存储在下列100~119号地址空间中,每个结点由数据(占2个字节)和指针(占2个字节)组成,如下所示:
05
U
17
X
23
V
31
Y
47
Z
^
^
100
120
其中指针X,Y,Z的值分别为多少?
该线性表的首结点起始地址为多少?
末结点的起始地址为多少?
五、写出下列程序段的输出结果(栈的元素类型SElemType为char)。
(1)
voidmain(){
StackS;
charx,y;
InitStack(S);
x=’c’;y=’k’;
push(S,x);push(S,’a’);push(S,y);
pop(S,x);push(S,’t’);push(S,x);
pop(S,x);push(S,’s’);
while(!
StackEmpty(S)){pop(S,y);printf(y);};
printf(x);
}
结果:
_____________________
(2)写出下列程序段的输出结果(队列中的元素类型QElemType为char)。
voidmain(){
QueueQ;InitQueue(Q);
Charx=’e’;y=’c’;
EnQueue(Q,’h’);EnQueue(Q,’r’);EnQueue(Q,’y’);
DeQueue(Q,x);EnQueue(Q,x);
DeQueue(Q,x);EnQueue(Q,’a’);
while(!
QueueEmpty(Q)){DeQueue(Q,y);printf(y);};
Printf(x);
}
结果:
_____________________
6.假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10。
试为这8个字母设计哈夫曼编码。
使用0~7的二进制表示形式是另一种编码方案。
对于上述实例,比较两种方案的优缺点。
五、算法设计(在下列算法的横线内填上适当的语句或表达式。
)
1、直接选择排序
voidselectsort(intR[])
//按递增序对R[0]~R[n-1]进行直接选择排序
{inti,j,k,temp;
for(i=0;i<=;i++)
{k=i;
for(j=;j<=n-1;j++)
if(R[j]R[k])
k=j;
if()
{temp=R[i];R[i]=;R[k]=temp;}
}
}
2、中序遍历二叉树
设二叉树用二叉链表表示,以t为根指针,二叉链表结点的类型为node;栈s的元素类型为指向node的指针类型,栈容量m足够大。
中序遍历的非递归算法如下:
structnode
{chardata;
node*lc,*rc;
};
voidpreorder(node*t)
{node*s[m],*p=t;
inttop=-1;//置栈空
do
{while(p!
=NULL)
{s[++top]=;
;
}
if(top!
=-1)
{p=s[top--];
;
;
}
}while((———————)||(p!
=NULL));
}
一、填空题(每空1分,共22分)
1、数据结构被形式地定义为(D,R),其中D是数据元素的有限集合,R是D上的关系有限集合。
2、一个算法的效率可分为时间效率和空间效率。
3、向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动n-i+1个元素。
4、在一个循环队列中,队首指针指向队首元素的前一个位置。
5、在具有n个单元的循环队列中,队满时共有n-1个元素。
6、向栈中压入元素的操作是先移动栈顶指针,后存入元素。
7、不包含任何字符(长度为0)的串称为空串;由一个或多个空格(仅由空格符)组成的串称为空白串。
8、假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。
已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为288B;末尾元素A57的第一个字节地址为1282;若按行存储时,元素A14的第一个字节地址为(8+4)×6+1000=1072;若按列存储时,元素A47的第一个字节地址为(6×7+4)×6+1000)=1276。
9、设一棵完全二叉树具有1000个结点,则此完全二叉树有500个叶子结点,有499个度为2的结点,有1个结点只有非空左子树,有0个结点只有非空右子树。
10、线性有序表(a1,a2,a3,…,a256)是从小到大排列的,对一个给定的值k,用二分法检索表中与k相等的元素,在查找不成功的情况下,最多需要检索8次。
设有100个结点,用二分法查找时,最大比较次数是7。
11、散列法存储的基本思想是由关键字的值决定数据的存储地址。
一、判断题(每题1分,共10分)
(×)9.队是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。
(×)1.二叉树中所有结点个数是2k-1-1,其中k是树的深度。
(应2i-1)
(√)7.栈和队列的存储方式既可是顺序方式,也可是链接方式。
(×)2.二叉树中所有结点,如果不存在非空左子树,则不存在非空右子树。
(×)3.对于一棵非空二叉树,它的根结点作为第一层,则它的第i层上最多能有2i—1个结点。
(应2i-1)
(×)3.链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。
(√)4.用二叉链表法(link-rlink)存储包含n个结点的二叉树,结点的2n个指针区域中有n+1个为空指针。
(√)5.具有12个结点的完全二叉树有5个度为2的结点。
(×)8.线性表在顺序存储时,逻辑上相邻的元素未必在存储的物理位置次序上相邻。
(×)5.顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。
三、单项选择题(每小题2分,共18分)
(C)1.数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为:
(A)存储结构(B)逻辑结构(C)顺序存储结构(D)链式存储结构
(B)2.一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是
(A)110(B)108(C)100(D)120
(A)3.在n个结点的顺序表中,算法的时间复杂度是O
(1)的操作是:
(D)访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)
(E)在第i个结点后插入一个新结点(1≤i≤n)
(F)删除第i个结点(1≤i≤n)
(G)将n个结点从小到大排序
(B)4.向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动个元素
(A)8(B)63.5(C)63(D)7
(A)4.判定一个队列QU(最多元素为m0)为满队列的条件是_______
A.QU->rear-QU->front==m0B.QU->rear-QU->front-1==m0
C.QU->front==QU->rearD.QU->front==QU->rear+1
(B)6.链表是一种采用存储结构存储的线性表;
(A)顺序(B)链式(C)星式(D)网状
(D)7.线性表若采用链式存储结构时,要求内存中可用存储单元的地址:
(A)必须是连续的(B)部分地址必须是连续的
(C)一定是不连续的(D)连续或不连续都可以
(B)8.线性表L在情况下适用于使用链式结构实现。
(A)需经常修改L中的结点值(B)需不断对L进行删除插入
(C)L中含有大量的结点(D)L中结点结构复杂
(C)9.若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为
A.iB.n=iC.n-i+1D.不确定
四、
1、略
2、答:
X=116Y=0Z=100首址=108末址=112
五、
1、答:
输出为“stack”。
2、答:
输出为“char”。
六、解:
方案1;哈夫曼编码
先将概率放大100倍,以方便构造哈夫曼树。
w={7,19,2,6,32,3,21,10},按哈夫曼规则:
【[(2,3),6],(7,10)】,……19,21,32
01
0101
192132
11
0101
7106
11
23
(100)
(40)(60)
192132(28)
(17)(11)
7106(5)
23
方案比较:
字母编号
对应编码
出现频率
1
1100
0.07
2
00
0.19
3
11110
0.02
4
1110
0.06
5
10
0.32
6
11111
0.03
7
01
0.21
8
1101
0.10
字母编号
对应编码
出现频率
1
000
0.07
2
001
0.19
3
010
0.02
4
011
0.06
5
100
0.32
6
101
0.03
7
110
0.21
8
111
0.10
方案1的WPL=2(0.19+0.32+0.21)+4(0.07+0.06+0.10)+5(0.02+0.03)=1.44+0.92+0.25=2.61
方案2的WPL=3(0.19+0.32+0.21+0.07+0.06+0.10+0.02+0.03)=3
结论:
哈夫曼编码优于等长二进制编码
六、阅读分析题(10分)
指出以下算法中的错误和低效(即费时)之处,并将它改写为一个既正确又高效的算法。
注:
上题涉及的类型定义如下:
#defineLISTINITSIZE100
#defineLISTINCREMENT10
typedefstruct{
ElemType*elem;//存储空间基址
Intlength;//当前长度
Intlistsize;//当前分配的存储容量
}SqList;
StatusDeleteK(SqList&a,inti,intk){
//本过程从顺序存储结构的线性表a中删除第i个元素起的k个元素
if(i<1||k<0||i+k>a.length)returnINFEASIBLE;//参数不合法
else{
for(count=1;count//删除一个元素
for(j=a.length;j>=i+1;j--)a.elem[j-1]=a.elem[j];
a.length--;
}
returnOK;
}//DeleteK
答:
错误有两处:
1参数不合法的判别条件不完整。
例如表长为10,若从第一位置(i=1)删除10个元素(k=10),要求合理但会被判为非法。
合法的入口参数条件为(0
应将if(i<1||k<0||i+k>a.length)returnINFEASIBLE
改为:
if(!
((0
第二个FOR语句中,元素前移的次序错误。
应将for(j=a.length;j>=i+1;j--)a.elem[j-1]=a.elem[j];
改为for(j>=i+1;j=a.length;j++)a.elem[j-1]=a.elem[j];
《数据结构》试卷B(开一页)
站点________专业年级________姓名_________学号_________成绩_________
一、填空题(每空1分,共15分)
1.向量、栈和队列都是结构,可以在向量的位置插入和删除元素;对于栈只能在插入和删除元素;对于队列只能在插入和删除元素。
2.栈是一种特殊的线性表,允许插入和删除运算的一端称为。
不允许插入和删除运算的一端称为。
3.数据结构是一门研究非数值计算的程序设计问题中计算机的以及它们之间的和运算等的学科。
4.在顺序表中插入或删除一个元素,需要平均移动元素,具体移动的元素个数与有关。
5.在具有n个单元的循环队列中,队满时共有个元素。
6.假设在有序线性表a[20]上进行折半查找,则比较一次查找成功的结点数为1;比较两次查找成功的结点数为;比较四次查找成功的结点数为;平均查找长度为。
二、判断正误(判断下列概念的正确性,并作出简要的说明。
)(每小题1分,共10分)
()1.线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。
()2.在表结构中最常用的是线性表,栈和队列不太常用。
()3.栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。
()4.对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。
()5.线性表的逻辑顺序与存储顺序总是一致的
()6.栈和队列是一种非线性数据结构。
()7.栈和队列的存储方式既可是顺序方式,也可是链接方式。
()8.两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。
()9.队是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。
()10.一个栈的输入序列是12345,则栈的输出序列不可能是12345。
三、单项选择题(每小题1分,共20分)
()1.数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为:
(A)存储结构(B)逻辑结构(C)顺序存储结构(D)链式存储结构
()2.若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为
A.iB.n=iC.n-i+1D.不确定
()3.判定一个栈ST(最多元素为m0)为空的条件是
A.ST->top<>0B.ST->top=0C.ST->top<>m0D.ST->top=m0
()4设矩阵A是一个对称矩阵,为了节省存储,将其下三角部分(如下图所示)按行序存放在一维数组B[1,n(n-1)/2]中,对下三角部分中任一元素ai,j(i≤j),在一维数组B中下标k的值是:
A.i(i-1)/2+j-1B.i(i-1)/2+jC.i(i+1)/2+j-1D.i(i+1)/2+j
()5.具有n(n>0)个结点的完全二叉树的深度为。
(A)log2(n)(B)log2(n)(C)log2(n)+1(D)log2(n)+1
()6.有8个结点的无向连通图最少有条边。
A.5B.6C.7D.8
7.数据结构反映了数据元素之间的结构关系。
链表是一种A,它对于数据元素的插入和删除B。
通常查找线性表数据元素的方法有C和D两种方法,其中C是一种只适合于顺序存储结构但E的方法;而D是一种对顺序和链式存储结构均适用的方法。
供选择的答案:
A:
①顺序存储线性表②非顺序存储非线性表③顺序存储非线性表④非顺序存储线性表
B:
①不需要移动结点,不需改变结点指针②不需要移动结点,只需改变结点指针
③只需移动结点,不需改变结点指针④既需移动结点,又需改变结点指针
C:
①顺序查找②循环查找③条件查找④二分法查找
D:
①顺序查找②随机查找③二分法查找④分块查找
E:
①效率较低的线性查找②效率较低的非线性查找③效率较高的非线性查找④效率较高的线性查找
答案:
A=B=C=D=E=
8.散列法存储的基本思想是根据A来决定B,碰撞(冲突)指的是C,处理碰撞的两类主要方法是D。
供选择的答案
A,B:
①存储地址②元素的符号③元素个数④关键码值
⑤非码属性⑥平均检索长度⑦负载因子⑧散列表空间
C:
①两个元素具有相同序号②两个元素的关键码值不同,而非码属性相同
③不同关键码值对应到相同的存储地址④负载因子过大⑤数据元素过多
D:
①线性探查法和双散列函数法②建溢出区法和不建溢出区法
③除余法和折叠法④拉链法和开地址法
答案:
A=B=C=D=
9.考虑具有如下性质的二叉树:
除叶子结点外,每个结点的值都大于其左子树上的一切结点的值。
并小于等于其右子树上的一切结点的值。
现把9个数1,2,3,…,8,9填入下图所示的二叉树的9个结点中,并使之具有上述性质。
此时,n1的值是A,n2的值是B,n9的值是C。
现欲把
放入此树并使该树保持前述性质,增加的一个结点可以放在D或E。
供选择的答案
A~C:
①1②2③3④4⑤5⑥6
⑦7⑧8⑨9
D~E:
①n7下面②n8下面③n9下面
④n6下面⑤n1与n2之间⑥n2与n4之间
⑦n6与n9之间⑧n3与n