专升本数据结构5年真题和详细解析.docx
- 文档编号:9573434
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:49
- 大小:491.85KB
专升本数据结构5年真题和详细解析.docx
《专升本数据结构5年真题和详细解析.docx》由会员分享,可在线阅读,更多相关《专升本数据结构5年真题和详细解析.docx(49页珍藏版)》请在冰豆网上搜索。
专升本数据结构5年真题和详细解析
2007年山东省专升本考试数据结构真题
一、判断题(10分。
本大题共10小题,每小题1分,在小题左面用√表示是,×表示否)
1.线性表的顺序存储结构是一种随机存储结构。
()
2.一个栈的入栈序列是a,b,c,d,e,则dceab是一个不可能的输出序列。
()
3.广义表(a,(a,b),d,e,((i,j),k))的深度是2。
()
4.树是一种重要的线性数据结构。
()
5.按照二叉树的定义,具有三个结点的二叉树有5种。
()
6.已知一个有向图的邻接矩阵表示,计算第i个结点的出度的方法是求矩阵第i列非零元的个数。
()
7.将递归算法转换为对应的非递归算法时,通常需要使用队列。
()
8.在哈夫曼编码中,当两个字符出现的频率相同时,其编码也相同。
()
9.散列法存储的基本思想是由关键字的值决定数据的存储地址。
()
10.(101,88,46,70,34,39,45,58,66,10)是堆。
()
二、填空题(15分。
本大题共5小题,5个空,每个空3分,将正确答案填在空格处)。
1.将下三角矩阵A[1..8,1..8]的下三角部分逐行地存储到起始地址为1000的内存单元中,已知每个元素占4个单元,则A[7,5]的地址为___________。
2.若某二叉树有20个叶结点,有30个只有一个孩子的结点,则该二叉树的总结点数为___________。
3.如果以{4,5,6,7,8}作为叶子结点的权值构造哈夫曼树,则其带权路径长度是___________。
4.在顺序存储的二叉树中,编号为i和编号为j的结点处在同一层的条件是___________。
5.有一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当折半查找值为82的结点时,___________次比较后查找成功。
三、(10分)已知关键字序列为{46,57,84,32,73,36,15,48,90,20},要求:
(1)构造一棵二叉排序树;
(2)在等概率情况下,该二叉排序树查找成功的平均查找长度。
四、(8分)假设在长度大于1的循环链表中,既无头结点,也无头指针,p为指向该链表中某个结点的指针。
设计一个算法,删除p指向结点的前趋结点。
五.(7分)设算术表达式由字符串b表示,其中可以包括三种括号:
圆括号、方括号和花括号,嵌套的顺序任意,如{[()]()}是正确的。
请编写一个算法,实现判别给定表达式中所含括号是否正确配对。
2007年山东省专升本考试数据结构真题答案及解析
一、判断题
1.【答案】√
【解析】顺序存储结构的特点:
(1)利用数据元素的存储位置表示线性表中相邻数据元素之间的前后关系,即线性表的逻辑结构与存储结构(物理结构)一致;
(2)在访问线性表时,可以利用上述给出的数学公式,快速地计算出任何一个数据元素的存储地址。
因此,我们可以粗略地认为,访问每个数据元素所花费的时间相等。
这种存取元素的方法被称为随机存取法,使用这种存取方法的存储结构被称为随机存储结构。
2.【答案】√
【解析】考查堆栈“后进先出”的特点。
第一个出栈元素是d,说明a、b、c已经入栈,因为a先于b进栈,所以必定在b之后出栈。
3.【答案】×
【解析】广义表的深度定义为所含括弧的重数,所以深度应为3。
4.【答案】×
【解析】线性表、堆栈、队列都可认为是线性结构,树和二叉树都是树形结构,而图则属于图状结构。
5.【答案】√
【解析】如图所示:
6.【答案】×
【解析】第i列非零元的个数表示的是第i个结点的入度,第i行非零元的个数表示的是第i个结点的出度。
7.【答案】×
【解析】将递归算法转换为对应的非递归算法时,通常需要使用栈。
8.【答案】×
【解析】在哈夫曼编码中,当两个字符出现的频率相同时,权重相同,但这两个字符的位置不同,所以其编码也不同。
9.【答案】×
【解析】散列法存储的基本思想是由关键字的值决定数据的存储地址,也即是把关键字的值作为自变量,通过一定的函数(称为散列函数)计算出对应的函数值,把这个函数值解释为数据的存储地址,而不是直接把关键字的值作为数据的存储地址。
10.【答案】√
【解析】是大顶堆。
二、填空题
1.【答案】1100
【解析】对下三角矩阵:
(i>=j,考虑包括主对角线上的元素)
行优先存储:
k=i(i-1)/2+j-1;
所以地址为:
1000+25*4=1100。
2.【答案】69
【解析】n=n0+n1+n2
n0=n2+1
所以n=2*n0+n1-1=40+30-1=69
3.【答案】69
【解析】如下图所示,所以结果为:
2*(6+7+8)+3*(4+5)=69
4.【答案】
5.【答案】4
【解析】
第一步:
设low指向首元素(赋值为1),high指向尾元素(赋值为13),计算下边中值得:
mid=(low+high)/2=7
则有R[mid]=R[7]=45>82
第二步:
由以上判断可知,如果记录中存在82,则一定在R[7]之后(因为R是非递减有序的)。
故修改low和high如下:
high值不变,仍然有high=13;
low的值修改:
使其指向R[7]的后一个元素,即使low=mid+1=8;
比较范围缩小至R[8]~R[13]。
mid=(low+high)/2=10
则有R[mid]=R[10]=77<82
第三步:
由以上判断可知,如果记录中存在82,则一定在R[10]之后(同样因为R是非递减有序的)。
故修改low和high的值如下:
low的值修改,使其指向R[10]的下一个元素,即low=mid+1=11;
high不变,仍然是13。
mid=(low+high)/2=12
则有R[mid]=R[12]=95。
第四步:
由以上判断可知,如果记录中存在82,则一定在R[12]之前(同样因为R是非递减有序的)。
故修改low和high的值如下:
high的值修改,使其指向R[12]的前一个元素,即high=mid-1=11;
low不变,仍然是11。
mid=(low+high)/2=11
则有R[mid]=R[11]=82。
查找成功。
三、【答案】
(1)构造过程如下:
(2)平均查找长度为:
(1+2*2+3*4+4*3)/10=2.9
四、【答案】
已知指向这个结点的指针是p,那么要删除这个结点的直接前趋结点,就只要找到一个结点,它的指针域是指向p的直接前趋,然后用后删结点法,将结点p的直接前趋结点删除即可。
算法如下:
voidDeleteNode(ListNode*p)
{//删除单循环链表中指定结点的直接前趋结点
ListNode*s,*q;
s=p;
while(s->next->next!
=p)
s=s->next;
//删除结点
q=s->next;
s->next=q->next;
free(s);//释放空间
}
注意:
若单循环链表的长度等于1,则只要把表删空即可。
五、【答案】
算术表达式中各种括号的使用规则为:
出现左括号,必有相应的右括号与之匹配,并且每对括号之间可以嵌套,但不能出现交叉情况。
我们可以利用一个栈结构保存每个出现的左括号,当遇到右括号时,从栈中弹出左括号,检验匹配情况。
在检验过程中,若遇到以下几种情况之一,就可以得出括号不匹配的结论。
(1)当遇到某一个右括号时,栈已空,说明到目前为止,右括号多于左括号;
(2)从栈中弹出的左括号与当前检验的右括号类型不同,说明出现了括号交叉情况;
(3)算术表达式输入完毕,但栈中还有没有匹配的左括号,说明左括号多于右括号。
下面是解决这个问题的完整算法。
typedefcharStackEntry;
intCheck()
{
STACKS;//定义栈结构S
charch;
InitStack(&S);//初始化栈S
while((ch=getchar())!
=’\n’){//以字符序列的形式输入表达式
switch(ch){
case(ch==‘(’||ch==‘[’||ch==‘{’):
Push(&S,ch);break;//遇左括号入栈
//在遇到右括号时,分别检测匹配情况
case(ch==‘)’):
if(StackEmpty(S))retrunFALSE;
else{Pop(&S,&ch);
if(ch!
=‘(’)returnFALSE;}
break;
case(ch==‘]’):
if(StackEmpty(S))retrunFALSE;
else{Pop(&S,&ch);
if(ch!
=‘[’)returnFALSE;}
break;
case(ch==‘}’):
if(StackEmpty(S))retrunFALSE;
else{Pop(&S,&ch);
if(ch!
=‘{’)returnFALSE;}
break;
default:
break;
}
}
if(StackEmpty(S))returnTRUE;
elsereturnFALSE;
}
2008年山东省专升本考试数据结构真题
一、单项选择题(10分、每题1分)
1、在一个单链表,已知p所指向的是q所指向结点的前驱结点,若在q和p之间插入s所指向的结点,则执行()
A、s->next=q->next;q->next=sB、q->next=s->next;s->next=q
C、p->next=s;s->next=qD、q->next=s;s->next=p
2、串是()
A、一些符号构成的序列B、一些字母构成的序列
C、一个以上的字符构成的序列D、任意有限个字符构成的序列
3、数组A[10][10]的下标下界为1,每个元素占2个字节,存储在起始地址为100的连续内存单元,则元素A[3][8]的地址为()
A、138B、154C、111D、145
4、已知广义表L=((x,y,z),a,(u,t,w)),则从L中取出原子项y的操作是()
A、head(tail(head(L)))B、head(head(tail(tail(tail(L)))))
C、head(tail(tail(tail(tail(L)))))D、head(tail(tail(head(tail(L)))))
5、已知完全二叉树有80个结点,则整个二叉树有____个度为2的结点。
()
A、39B、41C、40D、38
6、赫夫曼树中度为1的结点个数为()
A、0B、1C、2D、不确定
7、具有n个顶点的有向完全图,边的总数为()
A、nB、n(n-1)C、n-1D、n(n-1)/2
8、二分查找法适用于存储结构为____的,且按关键字排好序的线性表。
()
A、顺序存储B、链接存储C、顺序存储或链接存储D、索引存储
9、下列排序算法中,第一趟排序结束后,其最大或最小元素一定在其最终位置上的算法是()
A、归并排序B、直接插入排序C、快速排序D、起泡排序
10、一个有向无环图的拓扑序列个数是()
A、1个B、1个或多个C、0个D、多个
二、正误判断题(10分,正确打√,错误打×,每小题1分)
1、链表中结点数据域占的存储空间越多,存储密度越小。
()
2、带头结点和不带头结点的单链表在查找、删除、求长度等操作上无区别。
()
3、如果两个串串长相等且对应字符也相同,则这两个串相等。
()
4、压缩存储的三角矩阵和对称矩阵的存储空间不相同。
()
5、满二叉树是完全二叉树。
()
6、对于给定的树,与其对应的二叉树是唯一的。
()
7、线索二叉树的指针域中,指向前驱或后继的个数少于指向孩子的个数。
()
8、给定图的邻接矩阵存储不一定唯一。
()
9、若一个有向图的邻接矩阵主对角线以下的元素均为0,则该图拓扑有序序列存在。
()
10、对n个记录进行直接插入排序,其平均时间复杂度为O(nlog2n)。
()
三、填空题(10分,1题每空2分,其他题每空1分)
1、下列函数的功能是实现带头结点的单链表逆置。
voidturn(slink*L)
{
slink*p,*q;
p=_____________________________;
L->next=NULL;
while(___________________________)
{
q=p;
p=___________________________;
q->next=L->next;
L->next=q;
}
}
2、“算法”(Algorithm)就是对求解问题步骤的一种描述,也称为算法设计。
它具有以下五个特征有穷性,_____________,_______________,输入和输出。
3、评价算法好坏的五个方面_______________,_______________,正确性,可读性,健壮性。
四、操作计算题(10分,每题5分)
1、有一组关键字序列(24,19,56,13,97,59,41,85,1,87),写出用堆排序法进行升序排序的初始堆序列及第一趟排序后的堆序列。
2、给定如下图所示的带权无向图G1。
(1)画出该图的邻接矩阵
(2)给出采用普里姆算法从顶点3出发构造最小生成树的的过程。
五、算法设计题(10分)
给定二叉树,采用链式结构存储,编写算法voidcount(BitTreebt),实现功能:
统计二叉树中度为1的结点数目。
2008年山东省专升本考试数据结构真题答案及解析
一、单项选择题
1.【答案】C
【解析】p->next表示结点中存放的指针,该指针用来指向某个结点,原来的连接关系是p->next=q,意思是p中存放的指针的值是q,即p指向q。
插入的意思,打个比方,原来排队q在p的后面,现在要插一个s在他们中间,需要做的事就是把原来p,q二人的联系转化为p,s,q三人的联系,先让p指向s,即p->next=s;然后让s指向q,即s->next=q。
2.【答案】D
【解析】串是由零个或多个字符组成的有限序列,一般记为:
s=‘a1a2…an’(n>=0)。
零个字符的串称为空串,n为串的长度。
串的元素ai可以是字母、数字或其他字符。
3.【答案】B
【解析】数组元素A[i,j]的地址为:
Loc(A[i,j])=L1+(i-1)×U2×d+(j-1)×d。
4.【答案】A
【解析】L=((x,y,z),a,(u,t,w)),head(L)=(x,y,z),tail(head(L))=(y,z),head(tail(head(L)))=y。
5.【答案】A
【解析】n=n0+n1+n2
n0=n2+1
n=n1+2n2+1
n=80,为完全二叉树,说明度为1的结点只有1个,所以n2=39。
6.【答案】A
【解析】构造Huffman树的步骤:
①对给定的n个权值按照非递减顺序排列,构造n棵只有一个结点的二叉树的集合F={T1,T2,…Tn};
②在F中选定两棵根结点的权值最小的两个二叉树作为左右子树,构造一棵新的二叉树,新的二叉树的根结点的权值设为其左右子树根结点的权值之和;
③从F中删除原来的两棵二叉树,同时将新二叉树插入其中;
④重复执行
(2)和(3),直到F中剩余一棵二叉树,这棵树就是所求的Huffman树,结束。
根据构造步骤可知,Huffman树中只有度为0的叶子结点和度为2的新生成结点。
7.【答案】B
【解析】有向图G中弧数目的取值范围:
0<=e<=n(n-1)。
有n(n-1)条弧的有向图称为有向完全图。
8.【答案】A
【解析】折半查找(二分查找法)要求查找表用顺序存储结构存放且各数据元素按关键字有序(升序或降序)排列,也就是说折半查找只适用于对有序顺序表进行查找。
有序顺序表也称为有序表。
9.【答案】D
【解析】起泡排序是交换排序中一种简单的排序方法。
它的基本思想是对所有相邻记录的关键字值进行比效,如果是逆序(a[j]>a[j+1]),则将其交换,最终达到有序化。
其处理过程为:
1>将整个待排序的记录序列划分成有序区和无序区,初始状态有序区为空,无序区包括所有待排序的记录。
2>对无序区从前向后依次将相邻记录的关键字进行比较,若逆序则将其交换,从而使得关键字值小的记录向上“飘浮”(左移),关键字值大的记录好像石块,向下“堕落”(右移)。
每经过一趟冒泡排序,都使无序区中关键字值最大的记录进入有序区,对于由n个记录组成的记录序列,最多经过n-1趟冒泡排序,就可以将这n个记录重新按关键字顺序排列。
10.【答案】B
【解析】一个无环的有向图称做有向无环图(directedacyclinepraph)。
简称DAG图。
有向无环图是描述含有公共子式的表达式的有效工具。
有向无环图的拓扑序列至少一个。
二、正误判断题
1.【答案】×
【解析】存储密度=数据域占的存储空间/整个结点占的存储空间。
2.【答案】×
【解析】单链表在保存时,一般在第一个结点之前辅设一个结点,称为头结点。
头结点的数据域可以不存任何信息,也可以存储线性表的长度等附加信息,其指针域中存储指向第一个结点的指针(即第一个元素结点的存储位置)。
故单链表的头指针指向头结点,如果头结点的指针域为空,则说明是空表。
为了在第一个数据元素前面加入新元素或者删除第一个节点时头指针的值不变,在第一个数据元素前面要加一个所谓的头节点。
3.【答案】√
【解析】两个串相等的充要条件:
两个串的长度相等,并且各个对应位置的字符都相等。
4.【答案】×
【解析】上、下三角矩阵元素个数为:
1+2+3+…+n=n(n+1)/2。
因为取值为0的元素不必保存,则可用一个B[n(n+1)/2]的一维数组来保存上、下三角矩阵的非零值。
n阶对称方阵A中的元素满足下述条件:
aij=aji(1<=i,j<=n)。
对称矩阵(方阵)中的每一对数据元素可以共用一个存储空间,因此可以将n2个元素压缩存储到n(n+1)/2个元的空间中,所以存储空间相同。
5.【答案】√
【解析】①满二叉树:
一棵深度为k,结点个数为2k-1的二叉树称为满二叉树。
满二叉树是深度为k的结点数目最多的二叉树。
②完全二叉树:
深度为k,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树一一对应时,称为完全二叉树。
深度为k的完全二叉树结点个数范围:
最小结点数:
2k-1,最大结点数2k-1。
满二叉树一定是完全二叉树。
6.【答案】√
【解析】将一棵树转换成二叉树实际上就是将这棵树用孩子兄弟表示法存储即可,此时,树中的每个结点最多有两个指针:
一个指针指向第一个孩子,另一个指针指向右侧第一个兄弟。
当你将这两个指针看作是二叉树中的左孩子指针和孩子右指针时,就是一棵二叉树了。
一棵树转换成二叉树后,根结点没有右孩子。
7.【答案】×
【解析】二叉树的二叉链表表示法有n+1个空链。
同时,二叉链表(或三叉链表)虽然能方便的找到当前结点的双亲结点或左、右子结点,但如果要求寻找当前结点的前驱结点或者后继结点(按照某种遍历方法),则上述方法就不方便了,只能在遍历过程中动态得到。
如将二叉链表法中的n+1个空链利用起来,让其指向当前结点的前驱结点(如果指向左子树的指针域为空)或后继结点(如果指向右子树的指针域为空),则可解决以上问题,这就是线索二叉树提出的原因。
指向孩子的指针个数为n-1。
8.【答案】×
【解析】邻接矩阵法是图的一种顺序存储结构。
设G有n个顶点,则可用n*n矩阵A(称为G的邻接矩阵,行标从1..n,列标从1..n)保存该有向图。
对无向图:
如果vi,vj之间有边,则A的元素aij=aji=1,否则aij=aji=0;A为对称矩阵。
对有向图:
如果vi有指向vj的弧,则A的元素aij=1,否则aij=0。
对带权图:
如果vi,vj之间有边或者弧(vi指向vj),则A的元素aij=wij,否则aij=INFINITY。
利用邻接矩阵,可以判断任意两顶点之间是否有边(弧),并可方便求各顶点的度,图的边数等。
例如:
对无向图:
顶点vi的度TD(vi)是A中第i行(或者第i列)的元素之和。
对有向图:
顶点vi的出度OD(vi)是第i行的的元素之和,入度ID(vi)第i列的元素之和。
对带权图:
顶点vi的度的求法同上类似,但不再是求和,而是求行、列中不为零的元素个数。
9.【答案】√
【解析】矩阵主对角线以下的元素全部为0,即满足如下条件的矩阵。
aij=0,i>=j
如下图:
该图为有向无环图,所以拓扑有序序列存在。
10.【答案】×
【解析】
排序方法
平均时间
稳定性
直接插入排序
O(n2)
稳定
折半插入排序
O(n2)
稳定
起泡排序
O(n2)
稳定
直接选择排序
O(n2)
不稳定
希尔排序
O(n1.3)
不稳定
快速排序
O(nlog2n)
不稳定
堆排序
O(nlog2n)
不稳定
2-路归并排序
O(nlog2n)
稳定
基数排序
O(d*(rd+n))
稳定
三、填空题
1.【答案】p=L->nextp!
=nullp=p->next
【解析】逆置时需将每一个结点的指针域作以修改,使其原前趋结点成为后继。
2.【答案】确定性可行性
3.【答案】时间效率空间效率
四、操作计算题
1.【答案】
(1)建小堆
所以初始堆序列为:
(1,13,41,19,87,59,56,85,61,97)
(2)第一趟排序后的堆序列
第一趟排序后的堆序列为:
(1,13,19,41,61,87,59,56,85,97)
2.【答案】
(1)
(2)
说明:
第三步答案不唯一。
五、算法设计题
voidcount(BitTreebt)
{
inti=0;
if(bt==NULL)
break;
elseif(bt->lchild=0&&bt->rchild!
=0||bt->lchild!
=0&&bt->rchild=0)
i++;
else
{
i+=count(bt->lchild);
i+=count(bt->rchild);
}
printf(“%d”,i);
}
2009年山东省专升本考试数据结构真题
一、填空题(10分,每空0.5分)
1、根据数据元素之间关系的不同,数据的逻辑结构划分为______、______、______、______。
2、栈是一种特殊的线性表,它允许在表的一端进行____________操作,栈中元素的进出原则为__________________。
3、深度为k的二叉树其结点数最多有______个结点。
4、通常象交通、道路问题的数学模型是一种称为_________
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 年真题 详细 解析
![提示](https://static.bdocx.com/images/bang_tan.gif)