scau 2021春数据结构试题

一、选择题(本大题共 10 小题,每小题2分,共20

1、下列查找方法中,(    )适用于查找有序单链表。

A.分块查找;    B.哈希查找;    C.顺序查找;     D.二分查找;

线性表的查找有顺序查找和二分法查找两种。由于链表不能随机访问,要访问某个结点,必须从它的直接前驱的指针域出发才能找到。因此,链式存储的线性表,即使是有序表,也只能使用顺序查找。

2、在有n个结点的二叉树的二叉链表表示中,空指针数为(    )。

A.不定;        B.n+1;         C.n;           D.n-1;

3、在下列排序方法中,(    )方法所有情况下时间复杂度均为O(nlogn)。

A.希尔排序;        B.堆排序;            C.快速排序;      D.直接插入排序;

希尔排序的时间复杂度——O(n^(3/2))

堆排序的时间复杂度——O(nlogn)

快速排序的时间复杂度——最好情况O(nlog2n)   最坏情况O(n^2/2)    平均O(nlog2n)

直接插入排序的复杂度——O(n^2)

4、设有一个n^n的对称矩阵A,将其下三角部分按行存放在一个一维数组B中,A[0][0]存放于B[0]中,那么对角元素A[i][i]存放于B中(    )处。

A. (i+3)*i/2                     B. (i+1)*i/2

C. (2n-i+1)*i/2                   D. (2n-i-1)*i/2

首先,我们要知道什么是下三角。题目要求按行存放,第一行有一个元素,第二行有两个元素,第三行有三个元素……A[0][0]->B[0],A[1][0]->B[1],A[1][1]->B[2],A[2][0]->B[3],A[2][1]->B[4],A[2][2]->B[5]……就这么列几个其实就可以得到答案了,直接硬算就好。

5、已知一组待排序的记录关键字初始排列如下:45,34,87,25,67,43,11,66,27,78。快速排序法一趟排序的结果为(  )。

A.34,45,25,67,43,11,66,27,78,87         B.87,45,11,25,34,78,27,66,67,43              

C.27,34,11,25,43,45,67,66,87,78         D.34,11,27,25,43,78,45,67,66,87

快排的步骤可参考scau 8642 快速排序_zqihm的博客-CSDN博客

6、若某二叉树有15个叶子结点,有15个结点仅有一个孩子,则该二叉树的总结点数是(  )。

A. 42                         B. 44                       C. 45                      D. 46

设度为0的结点个数为N0=15,度为1的结点个数为N1=15,度为2的结点个数为N2

总度和=结点个数-1(这是解题关键,详情自行搜索)

由此可得 15*0+15*1+N2*2=15+15+N2-1

解 得 N2=14

7、设n个元素进栈序列是x1,x2,x3,…,xn,其输出序列是1,2,3,…,n,若x3=3,则x1的值(   )。

A. 可能是2       B. 不可能是1   C. 一定是2            D. 一定是1

8、在一个单链表中,若要在当前由指针p指向的结点后面插入一个由q指向的结点,则执行如下(   )语句序列。

 A. p=q; p->next=q;               B. p->next=q; q->next=p;

 C. p->next=q->next; p=q;       D. q->next=p->next; p->next=q;

9、串"aababaabacab"的next数组为(  )

A. 011212345123                          B. 012112345123                       

C. 012121234512                          D. 012341123412

可参考next数组求解详解_iamyvette的博客-CSDN博客_串的next数组怎么算

10、对下图所示的无向图,从顶点1开始进行深度优先遍历;可得到顶点访问序列是(  )

                                     

A.1 2 4 3 5 7 6         B.1 2 4 3 5 6 7         C.1 2 4 5 6 3 7         D.1 2 3 4 5 7 6

可参考图的深度优先遍历_zqihm的博客-CSDN博客

不参考也行,这题不难

二、应用题(本大题共 5 小题,每小题6分,共30分,要求写出解题过程)

1、假设一棵二叉树的层次遍历序列为ABCDEFG,中序遍历序列为DBGEACF。(1)请画出这棵二叉树;(2)请写出这棵二叉树的后序遍历序列。

层次遍历——一层一层的

中序遍历——先左再根再右

A为根结点,DBGE为左子树,CF为右子树……

元素不多,自己挨个演算就行

答案:

 2、对于如下的连通图,请给出从顶点0出发,利用普里姆(Prim)算法得到它的最小生成树,画出所得到的最小生成树,并求出最小生成树的权。                                           

普里姆算法——课本上有详细说明(P160)

每次找权值最小的边即可

 

 3、设哈希函数为H(key)=key MOD 13, 散列地址为0–14,用线性探测再散列的方法处理冲突。(1) 请画出依次插入元素23,34,56,24,75,12,49, 52,36,92,06,55后,该哈希表的状态(即,将各元素插入下表的对应地址);(2) 假设查找每个元素的概率相同,求出查找成功时的平均查找长度。                                                                       

哈希表——课本P216

key MOD 13,其中MOD为取模运算——m MOD n=m-n[m/n]  (中括号为取整函数,向下取整,即取不大于、最接近m/n的整数)

若散列地址发生冲突,后面冲突的地址加1;若取模运算得到负值,该负值加上表的最大下标即可(这里最大下标为14)

4、有一份电文中共使用了七种字符:A、B、C、D、E、F、G,它们出现的次数分别为12,7,20,9,14,17,21,试构造一棵哈夫曼树(请按左子树根结点的权小于等于右子树根结点的权的次序构造),并给出哈夫曼编码。

可参考哈夫曼编码详解——图解真能看了秒懂_Young_IT的博客-CSDN博客_哈夫曼编码的基本步骤

答案:

 5、已知某有向图的邻接表存储结构如图所示。

 (1).请画出该图。

(2).根据存储结构给出其深度优先遍历序列及广度优先遍历序列(从结点C出发)。

答案:

 四、算法设计题(本大题共 2小题,每小题10分,共20分。请先简要说明算法思想,然后写出算法的C语言源代码实现

1、设计一个算法deleteMinNode(LinkList &L),在带头结点的单链表L中删除所有结点值最小的结点(可能有多个结点值最小的结点)。

typedef struct LNode            

{

     ElemType  data;

     struct LNode   *next;

}LNode, *LinkList;

 答案:

用p从头至尾扫描单链表,pre指向*p结点的前驱,用minp保存
值最小的结点指针,minpre指向*minp结点的前驱。一面扫描,
一面比较,将最小值的结点放到*minp中。算法如下:
void deleteMinNode (LinkList &L)
{
    LinkList pre=L, p=pre->next, minp=p, minpre=pre;
	ElemType mindata=p->data;
	while (p!=NULL && p->data<mindata)
	{	mindata=p->data;
		p=p->next;
	}
    p=pre->next;
    while (p!=NULL)	
    {    
		if (p->data==mindata)
		{	pre->next=p->next;
			free(p);
		}
		pre=pre->next;
		p=pre->next;
	}
}

 2、二叉树用二叉链表存储表示。

typedef struct BiTNode

{

   TelemType  data;

   Struct BiTNode *lchild, *rchild;

} BiTNode, *BiTree;

编写一个复制一棵二叉树的递归算法。

统一使用如下函数名:BiTree  CopyTree(BiTree  T)

答案:

BiTree  CopyTree(BiTree  T) {  
if (!T ) return NULL;
if (!(newT = (BiTNode*)malloc(sizeof(BiTNode))))
  exit(Overflow);
newT-> data = T-> data;
newT-> lchild = CopyTree(T-> lchild);
newT-> rchild = CopyTree(T-> rchild);
return newT;
} 

别担心~本人刚开始做的时候也很懵,做多两套卷子就不会懵啦,基本的规律套路在这儿呢,期末加油~

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值