信息学奥赛初赛天天练-43-CSP-J2020基础题-链表、连通图、2进制转10进制、栈、队列、完全二叉树、哈希表应用

PDF文档公众号回复关键字:20240710

2020 CSP-J 选择题

单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项)

7.链表不具有的特点是()

A.可随机访问任一元素

B.不必事先估计存储空间

C.插入删除不需要移动元素

D.所需空间与线性表长度成正比

8.有 10 个顶点的无向图至少应该有( )条边才能确保是一个连通图

A.9

B.10

C.11

D.12

9.二进制数 1011 转换成十进制数是( )

A.11

B.10

C.13

D.12

11.下图中所使用的数据结构是( )

A.栈

B.队列

C.二叉树

D.哈希表

12.独根树的高度为 1。具有 61 个结点的完全二叉树的高度为( )

A.7

B.8

C.5

D.6

2 相关知识点

1) 链表

是一种常见的数据结构,它是由一系列节点(Node)组成,每个节点包含两部分:数据域和指针域。数据域用于存储数据,指针域用于存储下一个节点的地址。链表的第一个节点称为头节点(Head),最后一个节点称为尾节点(Tail),尾节点的指针域指向空(NULL)

链表占用空间大小,和链表的长度有关,没增加一个节点,增加一个数据节点和一个指针节点,存储空间和链表长度成正比

随机存取

随机存取(直接存取,Random Access)指的是当存储器中的数据被读取或写入时,所需要的时间与该数据所在的物理地址无关

顺序存取

顺序存取 (Sequential Access)是一种按记录的逻辑顺序进行读、写操作的存取方法,所需要的时间与该数据所在的物理地址有关。

顺序存取表现为:在存取第N个数据时,必须先访问前(N-1)个数据

#include<bits/stdc++.h>
using namespace std;
/*
  随机存取、顺序存取 
*/ 
int a[10]={0,1,2,3,4,5,6,7,8,9}; 
int main(){
	cout<<a[9]<<endl;//随机读取下标为9的元素 输出 9  

	for(int i=0;i<10;i++){//顺序存储 逐一读取 
		cout<<a[i]<<" ";		
	}
	return 0;
}

数组可以随机以及顺序存取,而链表只能顺序存取

内存分配

数组静态分配内存,定义时指定内存大小,链表动态分配内存,使用是指定内存大小

数组是一种线性表数据结构,有一组连续的内存空间,链表是通过指针将一组零散的内存块串联起来使用的数据结构,不需要一块连续的内存空间

链表的删除

链表通过指针建立起数据之间的联系,删除节点时,只需要改变对应的指针指向即可,不需要移动数组的元素

2) 连通图

连通性

如果任意两点间存在路径,此图具有连通性

无向图的连通性

任意两点是连通的,任意两点都可以形成通路

最小边数

n个节点的无向连通图最小边数为n-1条边

树为一种连通图,n个节点的树,边数为n-1

3) 2进制转10进制

按权展开,但要注意各个位的权,最低位(最右边)的权是0次方,权值为1

向左为2^1, 2^2, 2^3, 2^4, 2^5......

(11010110)2=1×2^7+1×2^6+0×2^5+1×2^4+0×2^3+1×2^2+1×2^1+0×2^0=(214)10

向右,小数部分,2^(-1), 2^(-2), 2^(-3), 2^(-4), 2^(-5)......

(1011.01)2=(1*2^3+1*2^1+1*2^0+1*2^(-2))=8+2+1+0.25=11.25

4) 数据结构

栈又名堆栈,是一种限定仅在表尾进行插入和删除操作的线性表,这一端称为栈顶,另一端称为栈底

栈中的数据元素遵守后进先出的原则

队列

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(head)进行删除操作,而在表的后端(tail)进行插入操作

队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头

队列可以理解成我们平时的排队,先进入的先出去

二叉树

每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒

例如下面是一棵二叉树

完全二叉树

除了最下层,其他每层都饱满,去除最后一层是一棵满二叉树,最下层的结点都集中在该层最左边的若干位置上

哈希表

哈希表(Hash Table)是一种通过键(key)直接访问存储在内存中的特定位置的值(value)的数据结构。它支持快速的查找、添加和删除操作,其平均时间复杂度为O(1)

哈希表的工作原理基于哈希函数,该函数将键映射到数组的索引位置,可以随机读取

3 思路分析

7.链表不具有的特点是( A )

A.可随机访问任一元素

B.不必事先估计存储空间

C.插入删除不需要移动元素

D.所需空间与线性表长度成正比

分析

链表只能顺序访问,不能随机访问

8.有 10 个顶点的无向图至少应该有( A )条边才能确保是一个连通图

A.9

B.10

C.11

D.12

分析

无向连通图,需要每2个节点都可以连通,n个节点,需要n-1条边,所以选A

如下图4个结点,3条边是连通图,任意2个结点都是连通的

9.二进制数 1011 转换成十进制数是( A )

A.11

B.10

C.13

D.12

分析

/*
按权展开,最低位(最右边)的权是0次方,权值为1
向左为2^1, 2^2, 2^3, 2^4, 2^5......
*/
(1011)2=1*2^3+0*2^2+1*2^1+1*2^0=8+0+2+1=11

11.下图中所使用的数据结构是( A )

A.栈

B.队列

C.二叉树

D.哈希表

分析

栈的操作是后进先出,队列操作是先进先出

如图 A进 B 进 B 出 C 进 符合栈的操作

二叉树需要构造树,没有体现

哈希表需要对键进行哈希函数运算,没有体现

12.独根树的高度为 1。具有 61 个结点的完全二叉树的高度为( D )

A.7

B.8

C.5

D.6

分析

独根树的高度为1,一个节点时树的高度为1

完全二叉树的特点为:除最后一层,都是满的

满二叉树结点个数
    
高度 1  - 结点 1   -2^1-1
高度 2  - 结点 3   -2^2-1
高度 3  - 结点 7   -2^3-1
高度 4  - 结点 15  -2^4-1
高度 5  - 结点 31  -2^5-1
高度 6  - 结点 63  -2^6-1
61个结点,最后一层不满,所以高度为6,第6层不满
所以选D
posted @ 2024-07-10 19:37  new-code  阅读(6)  评论(0编辑  收藏  举报