第一套试卷

news2024/10/7 10:13:14

1.队列的链式操作

在这里插入图片描述
循环链表实现的链式队列中,头指针的变动主要取决于队列的操作。一般来说,在循环链表队列中,头指针front指向队列的头节点,尾指针rear指向队列的尾节点的下一个位置。

当进行入队(插入)操作时,头指针front通常不需要变动,只需要移动尾指针rear到新的节点位置,并将新节点连接到队列中。这样可以保持队列的循环性质,队列仍然可以正常工作。

当进行出队(删除)操作时,如果删除的是头节点(即队列中只有一个节点),则需要同时移动头指针front和尾指针rear空队列状态。如果删除的不是头节点,只需移动头指针front下一个节点位置即可。

总的来说,在循环链表实现的链式队列中,头指针front的变动通常与出队操作相关,而入队操作一般只需要移动尾指针rear。通过正确地维护头尾指针,可以有效地实现循环链表队列的操作。

2.线性结构和非线性结构以及存储结构

1.线性结构一般指的是栈和队列
2.非线性结构一般指的是树和图
3.存储结构分为顺序存储,链式存储,散列存储,索引存储

3.二叉树相关知识点

1.二叉树前i层节点数最多为 2^k-1
2.二叉树第i层节点数最多为 2^(k-1)
3.完全二叉树前i层节点数是在2^i-1到2的i-1次方-1之间
4.度为m的树前i层节点数最多为m^i-1
5.高度为h度为m的树至少有 h+m-1个节点
6.边和节点个数的关系: 节点个数=边数+1
7.注意完全二叉树的节点个数和n0,n1,n2之间的关系**(n0=n2+1,n2=n0-1)**
8.二叉树的节点情况: i的左孩子为 2i,右孩子为 2i+1,当前层序为 log2^(i+1)

4.八大排序算法对应的时间复杂度和空间复杂度

  1. 冒泡排序:
    时间复杂度: 平均情况为0(n^2),最快为0(n)
    空间复杂度: 0(1)
  2. 选择排序:
    时间复杂度: 平均,最好,最坏情况都是0(n^2)
    空间复杂度: 0(1)
  3. 插入排序:
    时间复杂度: 平均,最坏情况是 0(n^2),最好情况为 0(n)
    空间复杂度: 0(1)
  4. 归并排序:
    时间复杂度: 平均,最好最坏的情况都是 0(nlogn)
    空间复杂度: 0(n)
  5. 快速排序:
    时间复杂度: 平均为 0(nlogn),最好情况也是 0(nlogn),最坏情况为 0(n^2)
    空间复杂度: 平均情况为 0(nlogn),最坏情况与归并排序类似,为 0(n)
  6. 堆排序:
    时间复杂度: 与快排和归并排序类似都是 0(nlogn),每一次分支的筛选运算时间为0(logn)
    空间复杂度: 0(1)

在堆排序中,主要涉及两种操作

建堆(Heapify):将一个无序序列构建成堆的过程,通常是从最后一个非叶子节点开始,依次向前对每个非叶子节点进行筛选操作,确保满足堆的性质。
调整堆(Heapify Down):在堆排序过程中,将堆顶元素取出后,需要对剩余元素进行调整,使其重新满足堆的性质。
对于堆排序中的筛选操作,时间复杂度取决于树的高度,而二叉堆的高度为 O(log n),因此对一个分支节点进行筛选的时间复杂度为 O(log n)。因为在每次筛选中,都是沿着树的高度进行比较和交换操作,所以时间复杂度与树的高度成正比。

总体来说,堆排序的时间复杂度为 O(n log n),其中建堆的时间复杂度为 O(n),每一次调整堆的时间复杂度为 O(log n),共进行 n-1 次调整

  1. 希尔排序:
    时间复杂度: 平均情况与堆排序,快速排序,归并排序类似,都是 0(nlogn),最坏情况为 0(n^2)
    空间复杂度: 0(1)

总结:
1.空间复杂度为1的有希尔排序堆排序(nlogn的时间复杂度),然后插入排序选择排序冒泡排序也是1(但是时间复杂度为n^2)
2.空间复杂度为nlogn的仅有快速排序,它的时间复杂度和空间复杂度都是0(nlogn)

5.散列存储的两种方法

1.链式散列(Chaining):

链式散列使用数组与链表相结合的方式来解决哈希冲突。具体来说,散列表的每个槽位(桶)都存储一个链表或者其他形式的动态数据结构,当发生哈希冲突时,新元素被插入到对应槽位的链表中。这样,不同关键字映射到同一个槽位的情况下,可以通过链表解决冲突,并保证元素的唯一性
优点:实现简单,适用于动态数据集合
缺点:链表长度过长时会影响查找效率,需要一定的额外空间存储指针

2.线性探测法(Linear Probing):

线性探测法是一种解决哈希冲突的方法,当发生哈希冲突时,线性探测法会依次检查散列表中的下一个位置是否为空,直到找到空位置为止。如果该位置已被占用,则继续向后查找,直到找到空位置或者遍历整个散列表。
优点:相对简单,适用于小规模数据集合。
缺点:容易产生堆积,即当冲突较多时,会出现线性探测长度过长的情况,影响查询性能
总的来说链式散列适用于动态数据集合,而线性探测法适用于小规模数据集合。在实际应用中,根据具体场景和需求选择合适的散列存储方法。

6.图的知识点


1.首先是完全图和连通图的区分:

**完全图:**任意两个节点都有的则为完全图(比如四个节点有6条边);
**连通图:**任意两个节点都有一条连通的路;
区别: 完全图n个顶点有n(n-1)/2条边,而连通图至少有n-1条边(比如两个节点)
(注意连通非连通情况,+1节点)
无向图: 的两倍(没有入度和出度的概念)


2.强连通图和连通分量,极大连通分量,生成树的区别:

强连通图:有方向,双向路径最少边数为n(环),至多为n(n-1)
(强连通图不能保证任何顶点到其他所有顶点都有弧)
连通分量: 相当于极大连通子图(子图极大,连通)
极小连通分量 边少的连通子图(生成树,所以无环)


3.无向完全图和有向完全图区别:

每个节点之间都有边,为1/2(n(n-1));
两个顶点之间都存在方向相反的两条弧:n(n-1);


4.强连通图和有向完全图区分:

结论: 有向完全图一定为强连通图 (有边有方向),但是强连通图不一定是有向完全图
因为: 强连通图不能保证任何顶点到其他所有顶点都有弧,可能只与其中之一之间有弧


5.顶点和边的关系:
n个顶点最多n-1条边(度),算入读出度,n个顶点最大度可达到2n-2


6.边的数量和生成树数量关系:
n个顶点,成为一个环,有n个边n个边n颗生成树


7.无向图中顶点和边的关系:
在一个连通的无向图中,当顶点数等于边数加一时,这个图就是一棵树。这个关系可以用来描述树的特性之一。

一棵树是一种特殊的无环连通图,具有以下特点:

1.所有的顶点之间都是连通的,且存在环(即无回路)。
2.恰好有n-1条边,其中n为顶点数;也就是说n-1条边可以保证n个顶点连通
因此,在一棵树中,顶点数等于边数加一,即 n = e + 1,其中n为顶点数,e为边数。


8.连通分量和树的关系:
树的个数=连通分量个数=节点n-边数e


9.邻接表:
有向图和无向图中,在邻接表中的边节点就为自己身上的边数,有向图为e,无向图为2*e


7.算法的质量

四个角度: 正确性,易读性,强壮性,高效率

8.树的广义表

广义表可以方便地表示各种树形结构,包括二叉树、多叉树等。例如,一个广义表可以表示如下的树形结构:

(A, (B, C), (D, (E, F, G)))

树形结构如下(括号同一级别,是兄弟节点,外为父节点):

         A
        / \
       B   C
      /
     D
    / \  \
   E   F  G
     

在这里插入图片描述

9.前缀,中缀,后缀表达式

1.前缀表达式:
1.前缀表达式又称波兰式,前缀表达式的运算符位于操作数
举例: (3+4)*5-6的前缀表达式为 - * + 3 4 5 6
方法:右至左扫描表达式遇到数字时,将数字压入堆栈遇到运算符时,弹出栈顶的两个数,用运算符对他们做相应的计算
如何写: 括号里的运算符最靠右,数字正常顺序,其余运算符按先后顺序来

2.中缀表达式:
日常

3.后缀表达式:
1.与前缀表达式相似,只是运算符位于操作数之后。
a+(b-c)*d——>前缀:+ a * - b c d;后缀:a b c - d * +
在这里插入图片描述

10.叉树中,为什么有n个节点,其中有n-1个指针域放了地址,n+1个指针式空指针

现在来解释一下为什么有 (n-1) 个指针域存放了地址,而有 (n+1) 个指针域是空指针

首先,我们知道一个二叉树有以下性质:

1.如果一个二叉树是空树,即没有节点,那么它自然不包含任何指针。
2.如果一个二叉树只有一个节点,那么该节点是根节点,它的左右子树为空,因此有两个空指针。
3.对于包含 (n) 个节点非空二叉树,由于每个节点都有一个指向左子树和一个指向右子树的指针域,所以总共有 (2n) 个指针域。其中,有 (n-1) 个指针域存放了地址,用来连接各个节点(类似于无向连通图,n点有n-1边),而有 (n+1) 个指针域是空指针

11.根据数组绘画线性表:

在这里插入图片描述
根据下标找next即可
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1494443.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于词袋模型的场景识别(附源代码!!!)

目录 1. 任务要求2. 数据集3. 实现算法4. 实验结果5. 源代码 1. 任务要求 输入:给定测试集图片,预测在15个场景中的类别。任务: 实现Tiny images representation。实现最近邻分类器nearest neighbor classifier。实现SIFT特征词袋表示 输出&…

diffusion model (扩散模型)原理

扩散模型分为正向过程和反向过程。 正向过程为一点点在图片上添加噪声的过程,反向过程为去噪声的过程。 图片的生成就是反向过程,给一张高斯噪声图片,逐步去噪生成图片。 扩散模型和VAE的区别, VAE是一步到位的(通过…

中文版国产Figma简单好上手

在过去的两年里,国内外协同办公室发展迅速。一方面,它是由突如其来的疫情推动的,另一方面,它是科学技术不断进步的必然结果。在市场的推动下,市场上出现了越来越多的协同办公软件,使工作场所的工作更加高效…

Java开发避坑指南,手把手教你写Java项目文档

前言 作为一个有丰富经验的微服务系统架构师,经常有人问我,“应该选择RabbitMQ还是Kafka?” 基于某些原因, 许多开发者会把这两种技术当做等价的来看待。的确,在一些案例场景下选择RabbitMQ还是Kafka没什么差别&…

2.Rust变量

变量的声明 let关键字 在Rust中变量必须要先声明才能使用,let关键字用于声明变量并将一个值绑定到该变量上。如下: fn main() {let var_name:i32 123123;println!("{}",var_name) //println! 是一个宏(macros),可以…

遇见未来的你——陪伴是最长情的告白

目录 一、背景介绍二、思路&方案三、过程1.家庭中彼此的陪伴最长情2.事业中与合伙人与同事与朋友与产品的陪伴最长情3.人生中与计划与落实与啊哈的陪伴最长情4.肉体与灵魂分分合合的体验 四、总结 一、背景介绍 人有时候一转身就是一辈子,所以珍惜转身的每一个…

如何计算搭建光伏电站需要多少成本?

光伏电站,又称太阳能电站,是一种利用太阳能发电的电力系统。随着全球对可再生能源的需求日益增加,光伏电站的建设变得越来越普遍。然而,在投资光伏电站之前,了解其建设成本是非常重要的。本文将介绍如何计算搭建光伏电…

96、C++ 性能优化一览

在对 C++ 版本的 resnet50 经过大约 5 个版本的优化之后,性能也基本达到了预期。至少利用手写的 resnet50 在 CPU 上推理一张图片感觉不到卡顿了。 下面对这几个版本的性能优化做一个总结。 初始版本1 第一版本的 C++ 代码,并没有考虑性能问题,仅仅是想按照手写 resnet50 …

【学习】torch.nn.CrossEntropyLoss交叉熵损失函数

交叉熵损失函数torch.nn.CrossEntropyLoss 交叉熵主要是用来判定实际的输出与期望的输出的接近程度,为什么这么说呢,举个例子: 在做分类的训练的时候,如果一个样本属于第K类,那么这个类别所对应的输出节点的输出值应…

腾讯云服务器99元一年是真的吗?只要61元!

腾讯云服务器99元一年是真的吗?假的,不要99,只要61元!又降价了!腾讯云服务器多少钱一年?61元一年起,2核2G3M配置,腾讯云2核4G5M轻量应用服务器165元一年、756元3年,4核16…

腾讯云服务器99元一年是真的吗?又降价,现在只要61元

腾讯云服务器99元一年是真的吗?又降价,现在只要61元。腾讯云服务器多少钱一年?61元一年起,2核2G3M配置,腾讯云2核4G5M轻量应用服务器165元一年、756元3年,4核16G12M服务器32元1个月、312元一年,…

【好书推荐-第九期】Sora核心技术相关书籍《扩散模型:从原理到实战》与《GPT 图解:大模型是怎样构建的》:Sora的两大核心技术,都藏在这两本书里!

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公众号:洲与AI。 🎈 本文专栏:本文收录…

底层day1作业

思维导图: 一.总结keil5下载代码和编译代码需要注意的事项 当使用Keil5下载代码和编译代码时,有一些需要注意的事项。以下是总结: 1. 确保正确配置目标 2. 配置编译器选项。 3. 确保正确配置连接器脚本 4. 检查编译错误和警告。 5. …

生成式模型实战—小小案例(python)

实战之前,环境需要已经搭建好。如果环境没有搭建好,可以参考PyTorch2.0 环境搭建详细步骤(Nvidia显卡)-CSDN博客 接下来,我们今天的学习之旅~ Step1. 安装类库 transformers pip install transformers Step2. 代码敬上 from transformer…

使用VS Code运行Java SpringBoot项目

本文并不详细讲 Java 项目启动前需要哪些配置,本文主要受众是平时用惯了 Idea 的 Java 程序员,仅讲解如何用 VS Code 启动服务 前提条件 Jdk、Maven、Nacos、Seata、TDengine等该配置的配置,该启动的启动,就你平时用 Idea 启动项…

力扣hot---岛屿数量

思路dfs: 首先通过两层for循环遍历每一个点,如果这个点为0或者2(这个2是什么呢?是在遍历该点以及该点连成的这一片区域中,因为通过深度优先搜索,遍历该点就等于遍历这一片区域,遍历这篇区域中的…

Qt 类的前置声明和头文件包含

1. 在头文件中引入另一个类经常有两种写法 1&#xff09;前置声明 2&#xff09;头文件包含 #ifndef FRMCOUPLE2_H #define FRMCOUPLE2_H#include <QWidget> //头文件包含namespace Ui { class frmcouple2; }//前置声明&#xff1a;QPushButton frmchkeyboard…

java网络编程 01 IP,端口,域名,TCP/UDP, InetAddress

01.IP 要想让网络中的计算机能够互相通信&#xff0c;必须为计算机指定一个标识号&#xff0c;通过这个标识号来指定要接受数据的计算机和识别发送的计算机&#xff0c;而IP地址就是这个标识号&#xff0c;也就是设备的标识。 ip地址组成&#xff1a; ip地址分类&#xff1a;…

基础小白快速入门web前端开发技术------>web概述

Web概述 我们在编程的学习中&#xff0c;随着学习的深入&#xff0c;我们会理解到WEB这个东西&#xff0c;那么 web究竟是个啥&#xff0c;到底该咋用&#xff1f; web&#xff0c;是网站的英文意思&#xff0c;又被称作“下一代Web3.0&#xff0c;互联网”&#xff0c;是在We…

2024.3.6

利用c语言通过sqlite3实现数据库增删改查&#xff1a; #include<myhead.h> int do_add(sqlite3 * ppDb) {char sql_insert[128]"insert into worker values ";char info[500]"";printf("请输入要添加的员工信息&#xff1a;\n");scanf(&…