数据结构与算法试卷第六套

1.带权路径长度之和

带权路径长度之和只需计算叶子节点的即可;
在这里插入图片描述
**哈夫曼树:**最小的两个节点构造成一个新的节点
带权路径之和计算叶子节点即可
请添加图片描述

2.快排复习

在这里插入图片描述

3.链表判空条件

在这里插入图片描述

4.树的遍历

前序: 根左右
后序: 左右根
B:
分析如下: 先序遍历顺序是:M-L-R,后序遍历顺序是:L-R-M,可以看到,只有中间的结点(M)顺序变化了,左右结点相对位置是不变的; 那可以推断出,要满足题意的话“二叉树的先序序列后序序列正好相反”,说明整个二叉树左子树或者右子树有一个没有…”
在这里插入图片描述

5.下列排序算法中,某一趟结束后未必能选出一个元素放在其最终位置上的是

简单选择排序,能够取出当前无序序列中最(小or大)值第一位置的元素互换位置。

堆排序每趟总能选出一个最值位于根节点

冒泡排序总是两两比较选出一个最值位于数组前面。

快速排序选出的枢轴在一趟排序中就位于了它最终的位置

插入排序(直接、二分)不一定会位于最终的位置,因为不确定 后面插入的元素对于前面的元素是否产生影响

希尔排序本质也是插入排序)只在子序列中直接插入排序。所以不能确定。

**二路归并排序(本质就是归并排序)**除非在缓存区一次放入所有的序列(这样得不偿失),否则不能确定最终位置
在这里插入图片描述

6.完全二叉树:

深度为k完全二叉树最少的节点个数:深度为k-1满二叉树的节点个数+1
深度为k完全二叉树最多的节点个数:深度为k满二叉树
在这里插入图片描述

7.邻接表的建立

在这里插入图片描述
n表示有n个顶点,e表示有e条边。
1.若采用邻接矩阵存储,
时间复杂度为O(n^2);
2.若采用邻接链表存储,建立邻接表或逆邻接表时,
输入的顶点信息即为顶点的编号,则时间复杂度为O(n+e);
若输入的顶点信息不是顶点的编号,需要通过查找才能得到顶点在图中的位置,则时间复杂度为O(n*e);

8.节点个数问题:

在这里插入图片描述

首先需要明白两个知识点:
1、哈夫曼树中不存在度为1的节点,只有度为0和2的节点
2、 n0=n2+1
其次要会求解:
设叶子结点的个数为n0,度为2的节点个数为n2,
则求全部节点数为:n=n0+n2
已知n0=n2+1,代入上式得:n=n2+1+n2=2*n2+1=199(题中给的数据)
求得n2=99,由此可得叶子结点n0=100

9.调用一次深度优先遍历可以访问到图中的所有顶点(x)

对于连通图是成立的;但是非连通图,无论是DFS还是BFS都访问不了所有节点;

10.索引分块

索引分块查找就类似于图书馆的索引,我们先找到第几楼,再找第几个书架,然后再找书。
分块查找就是先找到目标所在的数据块,然后块内查找。因此跟表中元素个数和块中元素个数都有关。
分块查找的平均查找长度不仅与索引表的长度有关,而且与块的长度有关。( 对 )

11.树的遍历确定二叉树的唯一形状

有两颗二叉树
(1)B是A的左孩子 先序 AB 后序 BA
(2)B是A 的右孩子 先序 AB 后序 BA
在这里插入图片描述
那么,什么遍历能够确定一颗唯一的二叉树呢?

已知前序遍历中序遍历可以确定一棵二叉树,
已知中序遍历后序遍历可以确定一棵二叉树
已知前序遍历和后序遍历,无法确定一棵二叉树
中序遍历二叉排序树可以得到一个有序的序列

12.树和二叉树之间的转换

1.二叉树转为树:可以先将二叉树转为森林(根据左孩子,右兄弟的思想),再转换为树;
2.树转为二叉树:左孩子右兄弟,所以根节点一定没有右子树,只有兄弟节点;

在这里插入图片描述
将树转成二叉树:

  1. 将 节点的孩子 放在左子树
  2. 将 节点的兄弟 放在右子树
    应该是转换完成后的二叉树的根节点没有右子树

13.顺序存储结构和链式存储结构的区别:

链式存储结构相比之下更好一点,链表不需要连续的存储单元操作方便

14.排序算法:

快速排序是基于比较的排序算法中平均性能最好的一种排序;

15.链表的插入:

在这里插入图片描述

s->next=p->next; p->next=s;

16.拓扑序列

去除入度为0的节点,将其出度去掉
在这里插入图片描述

请添加图片描述

17.设二叉树中结点的两个指针域分别为lchild和rchild,则判断指针变量p所指向的结点为叶子结点的条件是:

p->lchild==0&&p->rchild==0

大题

1.设计在顺序有序表中实现二分查找的算法:

int biSearch(struct record r[],int k){
  int low=0
  int high=n-1;//n为r数组的长度
  int mid;
  //2.遍历
  while(low<=high){
    mid=(low+high)/2;
    if(r[mid].key==k) return mid; //找到元素,返回元素下标
    else if(r[mid].key>k) high=mid-1;
    else low=mid+1;
  }
  return 0;
}

2.判断树是否是二叉排序树

bool flag=true;
void inorder(BiTree* bt) {
  // 1.BASE:
  if (bt == NULL) {
    return;
  }
  // 2.判断当前节点是否满足二叉排序树的性质
  if (bt->left != NULL && bt->left->data > bt->data) {
    flag = false;
    return;
  }
  // 3.判断当前节点是否满足二叉排序树的性质
  if (bt->right != NULL && bt->right->data < bt->data) {
    flag = false;
    return;
  }
  // 4.递归当前节点左子树
  inorder(bt->left);
  // 5.递归当前节点右子树
  inorder(bt->right);
}

3.直接插入排序的算法

// 定义链表节点结构
struct ListNode {
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(nullptr) {}
};

// 直接插入排序函数
ListNode* insertionSort(ListNode* head) {
    if (head == nullptr || head->next == nullptr) {
        return head; // 链表为空或只有一个节点,无需排序,直接返回
    }
    
    ListNode* dummy = new ListNode(0); // 创建哑节点作为辅助节点
    dummy->next = head;
    ListNode* prev = head; // prev指向已排序部分的最后一个节点
    
    while (prev->next != nullptr) {
        if (prev->val <= prev->next->val) {
            prev = prev->next; // 如果已排序部分的最后一个节点小于等于下一个节点,则继续向后遍历
        } else {
            ListNode* current = prev->next; // 记录下一个待排序节点
            prev->next = prev->next->next; // 将当前节点从原位置摘除
            ListNode* p = dummy; // 从头开始寻找插入位置
            while (p->next->val <= current->val) {
                p = p->next;
            }
            current->next = p->next; // 将当前节点插入到正确位置
            p->next = current;
        }
    }
    
    return dummy->next; // 返回排序后的链表头节点
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

结构体之成绩统计2

题目描述 有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩) 输入格式 学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。 输出格式 各门…

【从零开始构建GPT模型】(四)Linux篇:基于Linux内核的Ubuntu系统安装教程

目录 附&#xff1a;所需工具 一、安装包下载 1、下载安装包 2、注册账户 二、与Windows系统共存安装 1、制作系统启动U盘 2、进入安装界面 3、享受Ubuntu 注&#xff1a;本人为保险起见&#xff0c;并未安装Ubuntu系统&#xff0c;因要待新买一块硬盘之后&#xff0c;将…

【算法】一类支持向量机OC-SVM(1)

【算法】一类支持向量机OC-SVM 前言一类支持向量机OC-SVM 概念介绍示例编写数据集创建实现一类支持向量机OC-SVM完整的示例输出 前言 由于之前毕设期间主要的工具就是支持向量机&#xff0c;从基础的回归和分类到后来的优化&#xff0c;在接触到支持向量机还有一类支持向量机的…

WIN11环境下MYSQL5.7.44免安装版配置

一、MySQL下载 MySQL官网下载页面MySQL :: Download MySQL Community Server (Archived Versions)https://downloads.mysql.com/archives/community/ 若想要安装之前版本的MySQL&#xff0c;则点击Archives 进去页面后则可以轻松找到自己想要下载的MySQL版本 二、安装配置MySQ…

代码之美:探秘Java中的优雅参数验证

大家好,我是小米!今天我来和大家分享一下 Java 开发中一项非常重要的技术——参数校验。参数校验在我们的代码中起着至关重要的作用,它能够确保我们的应用程序接收到正确的数据,并且保证了系统的安全性和稳定性。在过去,我们可能会通过繁琐的 if-else 来进行参数校验,但是…

从零开始学习深度学习库-3:更多优化器

系列文章&#xff1a; 从零开始学习深度学习库-1&#xff1a;前馈网络 从零开始学习深度学习库-2&#xff1a;反向传播 欢迎来到本系列的第三部分&#xff0c;在这里&#xff0c;我们将从零开始构建一个深度学习库。 在这篇文章中&#xff0c;我们将向我们的库中添加更多的优…

数据结构从入门到精通——堆

堆 前言一、二叉树的顺序结构及实现 (堆&#xff09;1.1二叉树的顺序结构1.2堆的概念及结构 二、堆的练习题答案 三、堆的实现3.1堆向下调整算法3.2堆的创建3.3建堆时间复杂度3.4堆的插入3.5堆的删除3.6堆的代码实现 四、堆的具体实现代码Heap.hHeap.cTest.c堆的初始化堆的销毁…

基于单片机的温度控制系统设计

基于单片机的温度控制系统设计 摘要: 最近这些年&#xff0c;随着科学技术的不断发展和进步&#xff0c;单片机技术通过在各行各业中的应用也日臻完善。而温度测控系统也因单片机所特有的强大处理能力、功耗低以及体积小等优点向着小型化和智能化发展。本设计以STC89C52单片机…

Linux服务器之间免密登录

文章目录 1. 原理2. 密钥文件作用解释3. 实操 1. 原理 2. 密钥文件作用解释 #mermaid-svg-uJJwWJXgqGtbNwNB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-uJJwWJXgqGtbNwNB .error-icon{fill:#552222;}#mermaid-s…

AttributeError: module ‘tensorflow‘ has no attribute ‘placeholder‘解决办法

1.报错代码 self.inputs_base_structure_left tf.placeholder(dtypetf.float32, shape[None, 2048, 2], name"inputs_left") # initial a inputs to siamese_network2. 报错原因 AttributeError: module tensorflow has no attribute placeholder 这个错误发生的…

基于Java+SpringBoot+vue的智能农场管理系统详细设计和实现

基于JavaSpringBootvue的智能农场管理系统详细设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文…

KKVIEW: 远程控制软件哪个好用

远程控制软件哪个好用 随着科技的发展和工作方式的改变&#xff0c;远程控制软件越来越受到人们的关注和需求。无论是在家中远程办公&#xff0c;还是技术支持人员为远程用户提供帮助&#xff0c;选择一款高效稳定的远程控制软件至关重要。在众多选择中&#xff0c;有几款远程…

做外贸如何打动老是邮件不回复的客户

有人说&#xff1a;进入公司半年&#xff0c;都没有碰到什么大客户&#xff0c;小客户接了没利润&#xff0c;不想接&#xff0c;很难找到自己的定位&#xff0c;不知道如何去开发客户。 这是一个范围很大的问题&#xff0c;每个行业不一样&#xff0c;做外贸很多时候都是相通…

ET框架新起一个服务及实现服务之间的消息通讯

1.配置文件StartSceneConfig 2. SceneFactory switch (scene.SceneType) {case SceneType.Activity:break; } 定义SceneType枚举类型 public enum SceneType: uint {Activity 66, } 3.在InnerMessage.proto文件中定义消息 //ResponseType Activity2Other_Test message Ot…

Unity3d Shader篇(十五)— 激光扫描效果

文章目录 前言一、什么是X射线或激光扫描效果&#xff1f;1. X射线或激光扫描效果原理2. X射线或激光扫描效果优缺点优点&#xff1a;缺点&#xff1a; 二、使用步骤1. Shader 属性定义2. SubShader 设置3. 渲染 Pass4. 定义结构体和顶点着色器函数5. 片元着色器函数 三、效果四…

Labelme

文章目录 前言一、遇到问题二、排查问题1.分析问题2.验证问题2.1对比两者&#xff0c;格式是一致的&#xff0c;唯一不同之处是imagePath 不一样&#xff0c;labelme 生成的是图片的名称&#xff0c;不包含路径&#xff1b;而自动生成的是完整路径的图片名称。2.2再次思考两者的…

elasticsearch8.12 分词器安装

分词器的主要作用将用户输入的一段文本&#xff0c;按照一定逻辑&#xff0c;分析成多个词语的一种工具 分词器下载地址 analysis-ik Releases infinilabs/analysis-ik GitHub 一个简便 安装方式 安装完成之后 会提示重启&#xff0c;重启es即可 ./bin/elasticsearch-pl…

【AI论文阅读笔记】ResNet残差网络

论文地址&#xff1a;https://arxiv.org/abs/1512.03385 摘要 重新定义了网络的学习方式 让网络直接学习输入信息与输出信息的差异(即残差) 比赛第一名1 介绍 不同级别的特征可以通过网络堆叠的方式来进行丰富 梯度爆炸、梯度消失解决办法&#xff1a;1.网络参数的初始标准化…

C++ 拷贝构造函数和运算符重载

目录 一. 拷贝构造函数 1. 引入 2. 拷贝构造的概念 3. 浅拷贝 4. 深拷贝 二. C运算符重载 1. 概念 2. 注意事项 3.举例 一. 拷贝构造函数 1. 引入 我们在创建对象时&#xff0c;能不能创建一个与原先对象一模一样的新对象呢&#xff1f;为了解决这个问题&#x…

C++——类和对象(2)

1. 类的6个默认成员函数 当一个类中什么都没有&#xff0c;编译器会帮类自动生成6个默认成员函数例如&#xff1a; class Date {}; 此篇文章主要围绕构造函数与析构函数进行讲解。 2. 构造函数 2.1 概念 #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> usi…