数据结构 C/C++(实验五:图)
(大家好,今天分享的是数据结构的相关知识,大家可以在评论区进行互动答疑哦~加油!💕)
目录
提要:实验题目
一、实验目的
二、实验内容及要求
三、源程序及注释
实验1代码 (折半查找)
实验2代码(排序二叉树进行中序遍历)
实验3代码(哈希表)
五、实验结果
实验1结果
实验2结果
实验3结果
提要:实验题目
1. 图的邻接矩阵存储结构和深度、广度优先遍历
2. 图的邻接表存储结构和深度、广度优先遍历
一、实验目的
- 熟悉图的两种常用的存储结构,即邻接矩阵和邻接表,以及在这两种存储结构上的遍历图的方法,即深度优先遍历和广度优先遍历。
- 进一步掌握递归算法的设计方法。
- 了解图的典型应用的算法程序。
二、实验内容及要求
- 建立图的邻接矩阵存储结构(数组表示),并将邻接矩阵输出。
- 建立图的邻接表存储结构,并将邻接表输出。
- 图的深度优先遍历。
- 图的广度优先遍历。
注:前两个题目必做,第3、4题选做一个。
三、源程序及注释
实验1代码 (折半查找)
#include <iostream>
using namespace std;// 折半查找函数
int binarySearch(int arr[], int size, int target) {int left = 0;int right = size - 1;cout << "查找过程如下:\n";while (left <= right) {int mid = left + (right - left) / 2; // 计算中间位置// 打印当前查找区间及中间元素cout << "当前查找区间:[" << left << ", " << right << "],中间元素:arr[" << mid << "] = " << arr[mid] << endl;// 如果目标值等于中间值,返回索引if (arr[mid] == target) {cout << "找到了目标元素 " << target << ",位置为:" << mid << endl;return mid;}// 如果目标值小于中间值,缩小查找范围到左半部分else if (arr[mid] > target) {right = mid - 1;}// 如果目标值大于中间值,缩小查找范围到右半部分else {left = mid + 1;}}cout << "未找到目标元素 " << target << endl;return -1; // 如果未找到目标值,返回-1
}int main() {int size;cout << "请输入数组的大小:";cin >> size;int arr[size];cout << "请输入数组元素(要求数组是升序的):" << endl;for (int i = 0; i < size; i++) {cin >> arr[i];}int target;cout << "请输入要查找的目标值:";cin >> target;// 调用折半查找函数int result = binarySearch(arr, size, target);if (result != -1) {cout << "元素 " << target << " 在数组中的索引位置是: " << result << endl;} else {cout << "元素 " << target << " 不在数组中。" << endl;}return 0;
}
//请输入数组的大小:6
//请输入数组元素(要求数组是升序的):
//10 20 30 40 50 60
//请输入要查找的目标值:40//查找过程如下:
//当前查找区间:[0, 5],中间元素:arr[2] = 30
//当前查找区间:[3, 5],中间元素:arr[4] = 50
//当前查找区间:[3, 3],中间元素:arr[3] = 40
//找到了目标元素 40,位置为:3
//元素 40 在数组中的索引位置是: 3
实验2代码(排序二叉树进行中序遍历)
#include <iostream>
using namespace std;struct TreeNode {int val;TreeNode* left;TreeNode* right;TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};// 插入节点到二叉排序树
TreeNode* insert(TreeNode* root, int val) {if (root == nullptr) {return new TreeNode(val);}if (val < root->val) {root->left = insert(root->left, val);} else {root->right = insert(root->right, val);}return root;
}// 中序遍历
void inorder(TreeNode* root) {if (root != nullptr) {inorder(root->left);cout << root->val << " ";inorder(root->right);}
}int main() {int n, val;TreeNode* root = nullptr;cout << "Enter number of elements: ";cin >> n;cout << "Enter the elements: ";for (int i = 0; i < n; ++i) {cin >> val;root = insert(root, val);}cout << "Inorder traversal: ";inorder(root);cout << endl;return 0;
}
//Enter number of elements: 7
//Enter the elements: 50 30 20 40 70 60 80
//Inorder traversal: 20 30 40 50 60 70 80
实验3代码(哈希表)
#include <stdio.h>
#include <stdlib.h>// 哈希表的最大大小
#define MAX_SIZE 100// 哈希表结构
typedef struct HashTable {int *table;int size;
} HashTable;// 哈希函数:除留余数法
int hash(int key, int size) {return key % size;
}// 初始化哈希表
void initHashTable(HashTable *ht, int size) {ht->size = size;ht->table = (int *)malloc(sizeof(int) * size);// 初始化哈希表中的所有槽为 -1,表示空槽for (int i = 0; i < size; i++) {ht->table[i] = -1;}
}// 线性探测法处理冲突
int linearProbe(HashTable *ht, int key) {int index = hash(key, ht->size);int i = 0;// 查找空槽while (i < ht->size && ht->table[(index + i) % ht->size] != -1) {i++;}// 返回下一个空槽的索引return (index + i) % ht->size;
}// 插入操作
void insert(HashTable *ht, int key) {int index = hash(key, ht->size);// 如果当前槽位已经被占用,则进行线性探测if (ht->table[index] != -1) {index = linearProbe(ht, key);}// 将元素插入哈希表ht->table[index] = key;
}// 查找操作
int find(HashTable *ht, int key) {int index = hash(key, ht->size);int i = 0;// 查找元素while (i < ht->size) {int probeIndex = (index + i) % ht->size;if (ht->table[probeIndex] == -1) {return 0; // 没有找到}if (ht->table[probeIndex] == key) {return 1; // 找到元素}i++;}return 0; // 没有找到
}// 打印哈希表
void printHashTable(HashTable *ht) {for (int i = 0; i < ht->size; i++) {if (ht->table[i] != -1) {printf("Index %d: %d\n", i, ht->table[i]);} else {printf("Index %d: empty\n", i);}}
}// 主函数
int main() {int size, numElements, element, key;// 用户输入哈希表大小printf("Enter the size of the hash table: ");scanf("%d", &size);// 创建哈希表HashTable ht;initHashTable(&ht, size);// 用户输入插入的元素数量printf("Enter the number of elements you want to insert: ");scanf("%d", &numElements);// 插入元素printf("Enter %d elements to insert into the hash table:\n", numElements);for (int i = 0; i < numElements; i++) {scanf("%d", &element);insert(&ht, element);}// 打印哈希表内容printf("\nHash Table contents:\n");printHashTable(&ht);// 查找操作printf("\nEnter an element to search in the hash table: ");scanf("%d", &key);printf("Find %d: %s\n", key, find(&ht, key) ? "Found" : "Not Found");// 释放内存free(ht.table);return 0;
}
四、实验结果
实验1结果
实验2结果
实验3结果
(今日分享暂时到此为止啦!为不断努力的自己鼓鼓掌吧🥳。今日文案分享:人生没有标准答案,珍惜当下永远是最优解。)
相关文章:
数据结构 C/C++(实验五:图)
(大家好,今天分享的是数据结构的相关知识,大家可以在评论区进行互动答疑哦~加油!💕) 目录 提要:实验题目 一、实验目的 二、实验内容及要求 三、源程序及注释 实验1代码 (折半查…...
非零掩码矩阵邻接矩阵
文章目录 1. 举例:2. python 代码3. 邻接矩阵 1. 举例: 在深度学习过程中,我们经常会用到掩码矩阵,比如我们有一个矩阵A表示如下,希望得到矩阵B,在矩阵A的非零位置表示为1,零位置表示为0, A …...
Docker安装
目录 1. 联网安装 Docker 2. 离线安装 Docker 3. 安装 Docker Compose 4. 卸载 Docker 和 Docker Compose 1. 联网安装 Docker 在 CentOS 上通过 yum 安装 Docker: # 安装 Docker yum -y install docker # 启动 Docker systemctl start docker # 查看 D…...
嵌入式驱动开发详解21(网络驱动开发)
文章目录 前言以太网框架ENET 接口简介MAC接口MII \ RMII 接口MDIO 接口RJ45 接口 PHY芯片以太网驱动驱动挂载wifi模块挂载后续 前言 linux驱动主要是字符设备驱动、块设备驱动还有网络设备驱动、字符设备驱动在本专栏前面已经详细将解了,网络设备驱动本文会做简要…...
2024年12月25日Github流行趋势
项目名称:system-design-primer 项目维护者:donnemartin, cclauss, satob, fluency03, linhe0x0项目介绍:学习如何设计大规模系统。为系统设计面试做准备。包括 Anki 卡片。项目star数:282,387项目fork数:47,226 项目…...
6、mysql的MHA故障切换
MHA的含义 MHA:master high availability,建立在主从复制基础上的故障切换的软件系统。 主从复制的单点问题: 当主从复制当中,主服务器发生故障,会自动切换到一台从服务器,然后把从服务器升格成主&…...
#error: WinSock.h has already been included解决方案
原因: 在工程中使用了 Boot 库之后,使用了socket、tcp 相关的头文件,在其他地方还是包括了头文件<windows.h>,该头文件内包含了<winsock.h>。导致遇到报错问题:WinSock.h has already been included 解决…...
npm淘宝镜像
通过命令行配置npm的淘宝镜像源和官方镜像源,以及如何安装和使用cnpm来解决安装包卡顿或无法安装的问题。通过设置registry和disturl,配合清理缓存,可以优化npm的下载速度。 1、官方默认镜像 npm config set registry https://registry.n…...
光谱相机的工作原理
光谱相机的工作原理主要基于不同物质对不同波长光的吸收、反射和透射特性存在差异,以下是其具体工作过程: 一、光的收集 目标物体在光源照射下,其表面会对光产生吸收、反射和透射等相互作用。光谱相机的光学系统(如透镜、反射镜…...
安全筑堤,效率破浪 | 统一运维管理平台下的免密登录应用解析
在信息技术迅猛发展的今天,企业运维管理领域正面临着前所未有的复杂挑战。统一运维管理平台作为集中管理和监控IT基础设施的核心工具,其安全性和效率至关重要。免密登录作为一种新兴的身份验证技术,正逐渐成为提升运维管理效率和安全性的重要…...
外包干了27天,技术退步明显。。。。。
时光荏苒,转眼我已是一个拥有近四年功能测试经验的大专生。20年,我满怀激情地通过校招进入湖南某知名软件公司,期待在这里开启我的职业生涯。然而,长时间的舒适环境让我渐渐失去了前进的动力,技术停滞不前,…...
leetcode 面试经典 150 题:合并两个有序数组
链接合并两个有序数组题序号88题型数组解题方法1. 双指针法 ;2. 合并排序法难度简单熟练度✅✅✅✅✅ 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 …...
波动理论、传输线和S参数网络
波动理论、传输线和S参数网络 传输线 求解传输线方程 对于传输线模型,我们通常用 R L G C RLGC RLGC 来表示: 其中 R R R 可以表示导体损耗,由于电子流经非理想导体而产生的能量损耗。 G G G 表示介质损耗,由于非理想电介质…...
YOLO11改进-注意力-引入自调制特征聚合模块SMFA
本篇文章将介绍一个新的改进机制——SMFA(自调制特征聚合模块),并阐述如何将其应用于YOLOv11中,显著提升模型性能。随着深度学习在计算机视觉中的不断进展,目标检测任务也在快速发展。YOLO系列模型(You Onl…...
uniapp登录
第一步整登录 先整个appid APPID和APPSecret https://developers.weixin.qq.com/community/develop/article/doc/000ca4601b8f70e379febac985b413 一个账号只能整一个小程序 正确流程 调用uni.login https://juejin.cn/post/7126553599445827621 https://www.jb51.net/a…...
mysql,数据库主从同步搭建
1.mysql主从同步1.主从同步原理(1)复现binlog日志中的sql语句(2)主服务器启动binlog日志(3)从服务器启动binlog日志,io线程,sql线程2.主从同步结构一主一从一主多从级联复制互为主从(keepalived高可用)3.mysql复制模式异步复制:主服务器处理完sql直接返回给客户端结果半同步复制…...
云途领航:现代应用架构助力企业转型新篇
在数字化转型的浪潮中,现代应用架构为企业带来了灵活性、效率和创新能力。各类服务模型相继出现,为企业提供了强有力的支持,助力其顺利转型。随着技术的快速发展,企业面临的挑战和机遇也在不断演变,这促使它们必须重新…...
redis——岁月云实战
单线程序,基于IO多路复用,基于内存和c语言编写,性能高。redis官方命令 1 数据结构 1.1 key的层级 redis的key可以通过冒号(:)来划分层级,如下图mms:company:order,但系统中可以看到有不少没有…...
Flink调优----资源配置调优与状态及Checkpoint调优
目录 第 1 章 资源配置调优 1.1 内存设置 1.1.1 TaskManager 内存模型 1、内存模型详解 2、案例分析 1.1.2 生产资源配置示例 1.2 合理利用 cpu 资源 1.2.1 使用 DefaultResourceCalculator 策略 1.2.2 使用 DominantResourceCalculator 策略 1.2.3 使用 DominantRes…...
Java web的发展历史
目录 前言: 一.Model I和Model II 1.Model I开发模式 编辑 2.Model II开发模式 二. MVC模式 前言: 该篇文章主要介绍了Java web的发展历史,以及MVC相关内容 一.Model I和Model II 1.Model I开发模式 Model1的开发模式是ÿ…...
面向微服务的Spring Cloud Gateway的集成解决方案:用户登录认证与访问控制
🎯导读:本文档详细描述了一个基于Spring Cloud Gateway的微服务网关及Admin服务的实现。网关通过定义路由规则,利用负载均衡将请求转发至不同的后端服务,并集成了Token验证过滤器以确保API的安全访问,同时支持白名单路…...
MongoDB 更新文档
关于MongoDB更新文档的操作,可以通过多种方法实现。以下是一些常用的方法: updateOne() 方法:用于更新匹配过滤器的单个文档。其语法为 db.collection.updateOne(filter, update, options)。其中,filter 用于查找文档的查询条件&a…...
静态路由与动态路由
静态路由和动态路由是网络中两种不同的路由配置方式,它们在网络中的运作方式、配置方法以及适用场景等方面存在显著差异。以下是对两者的详细比较: 一、定义与配置方式 静态路由 定义:静态路由是由网络管理员手动配置的固定路径,…...
leetcode hot二叉树的层序遍历
102. 二叉树的层序遍历 已解答 中等 相关标签 相关企业 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点) # Definition for a binary tree node. # class TreeNode(object): # …...
Windows下ESP32-IDF开发环境搭建
Windows下ESP32-IDF开发环境搭建 文章目录 Windows下ESP32-IDF开发环境搭建一、软件安装二、搭建IDF开发环境2.1 安装VS Code插件:2.2 配置ESP-IDF插件:2.3 下载例程源码: 三、编译和烧录代码四、Windows下使用命令行编译和烧录程序4.1 配置环…...
基于高云GW5AT-15 FPGA的SLVS-EC桥MIPI设计方案分享
作者:Hello,Panda 一、设计需求 设计一个4Lanes SLVS-EC桥接到2组4lanes MIPI DPHY接口的电路模块: (1)CMOS芯片:IMX537-AAMJ-C,输出4lanes SLVS-EC 4.752Gbps Lane速率; (2&…...
【day18】多线程高级应用
day17回顾 在深入探讨模块18之前,让我们回顾一下【day17】中的关键内容: 创建多线程: 继承Thread类: 定义一个类,继承Thread。重写run方法,设置线程任务。创建自定义线程对象。调用start方法,开…...
Python接口自动化测试的实现
1)环境准备: 接口测试的方式有很多,比如可以用工具(jmeter,postman)之类,也可以自己写代码进行接口测试,工具的使用相对来说都比较简单,重点是要搞清楚项目接口的协议是什么,然后有针对性的进行选择&#x…...
nvidia docker, nvidia docker2, nvidia container toolkits区别
背景 在docker容器中用GPU时,查阅了网上许多教程,教程之间概念模糊不清,相互矛盾,过时的教程和新的教程混杂在一起。主要原因是Nvidia为docker容器的支持发生了好几代变更,api发生了不少变化。下面来总结一下各代支持…...
字节跳动Java开发面试题及参考答案(综合篇)
HTTP 与 HTTPS 的区别? HTTP(超文本传输协议)和 HTTPS(超文本传输安全协议)主要有以下区别。 从安全性角度看,HTTP 是明文传输协议,数据在网络中传输时是以原始文本的形式发送的。这就好比在信件传递过程中没有进行密封,任何中间节点(如路由器、代理服务器等)都可以查…...
搭建Elastic search群集
一、实验环境 二、实验步骤 Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎Elasticsearch目录文件: /etc/elasticsearch/elasticsearch.yml#配置文件 /etc/elasticsearch/jvm.options#java虚拟机 /etc/init.d/elasticsearch#服务启动脚本 /e…...
深入解析 Spring WebFlux:原理与应用
优质博文:IT-BLOG-CN WebFlux 是 Spring Framework 5 引入的一种响应式编程框架,和Spring MVC同级,旨在处理高并发和低延迟的非阻塞应用。这是一个支持反应式编程模型的新Web框架体系。 顺便一提,Spring Cloud Gateway在实现上是…...
Docker 部署 SpringBoot VUE项目
是一套基于若依的wms仓库管理系统 一、后端部署 后端地址:https://gitee.com/zccbbg/wms-ruoyi/tree/v1/ 1、用IDEA拉代码,并修改API统一后缀 2、复制一个配置文件 application-dev.yaml,并修改里面的mysql与redis配置 3、将打包的jar上传…...
【Java基础面试题031】Java运行时异常和编译时异常之间的区别是什么?
回答重点 主要有三大区别,分别是发生时机、捕获和处理方式和设计意图 1)发生时机: 编译时异常(Checked Exception):发生在编译阶段,编译器会检查此类异常,程序必须堆这些异常进行…...
常见网络功能概述-主要拆解功能
大家觉得有意义和参考价值记得关注和点赞!!! 一、防火墙介绍 防火墙(Firewall)是一种网络安全系统,用于监控、过滤和控制进出网络的数据流量。它是一种屏障,通过策略规则来允许、限制或拒绝数…...
Chapter 3-1. Detecting Congestion in Fibre Channel Fabrics
Chapter 3. Detecting Congestion in Fibre Channel Fabrics This chapter covers the following topics: 本章包括以下主题: Congestion detection workflow. Congestion detection metrics. Congestion detection metrics and commands on Cisco MDS switches. Automatic A…...
Day13 用Excel表体验梯度下降法
Day13 用Excel表体验梯度下降法 用所学公式创建Excel表 用Excel表体验梯度下降法 详见本Day文章顶部附带资源里的Excel表《梯度下降法》,可以对照表里的单元格公式进行理解,还可以多尝试几次不同的学习率 η \eta η来感受,只需要更改学习率…...
重温设计模式--5、职责链模式
文章目录 职责链模式的详细介绍C 代码示例C示例代码2 职责链模式的详细介绍 定义与概念 职责链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它旨在将请求的发送者和多个接收者解耦,让多个对象都有机会处理请求&am…...
C语言-08复合类型-结构体
一、结构体 1.结构体struct struct关键字,允许自定义复合数据类型,将不同类型的值组合在一起,这种类型称为结构体类型。 2.使用步骤 第一步:创建或声明结构体 第二步:定义结构体变量 第三步:调用并操作结…...
vue 基础学习
一、ref 和reactive 区别 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><div id"app"><h1>{{Web.title}}</h1><h1&…...
Elasticsearch检索方案之一:使用from+size实现分页
前面两篇文章介绍了elasticsearch以及Kibana的安装,检索引擎以及可视化工具都已经安装完成,接下来介绍下如何使用golang的sdk实现简单的分页查询。 1、下载Elastic官方golang sdk 在讲解elasticsearch检索之前,需要先把golang的环境安装好&…...
Highcharts 饼图:数据可视化利器
Highcharts 饼图:数据可视化利器 引言 在数据可视化的领域中,饼图作为一种经典且直观的图表类型,被广泛应用于各种行业和场景中。Highcharts,作为一个功能强大且易于使用的JavaScript图表库,为我们提供了创建交互式和…...
Docker部署Sentinel
一、简介 是什么:面向分布式、多语言异构化服务架构的流量治理组件 能干嘛:从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性 官网地址:https://sentinelguard.io/zh-c…...
后端接口设计
一、基本规范 1.URL设计 应遵循RESTful风格,使用动词名词的方式描述接口的功能。应简洁明了,易于理解和记忆。 2.请求协议及方法 使用HTTPS协议进行数据传输,保证数据在传输过程中的安全性。如无特殊情况,统一使用post方法。 …...
GitLab部署到阿里云服务器上
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。 一、安装 1.创建一…...
GitLab的卸载与重装
目录 一、GitLab的卸载 二、 GitLab的安装与配置 1. 创建安装目录 2. 安装 3. 使用 3.1 初始化 3.2 创建空白项目 编辑 3.3 配置SSH 3.3.1 配置公钥 编辑 3.3.2 配置私钥 3.4 配置本地git库 一、GitLab的卸载 1. 停止gitlab sudo gitlab-ctl stop 2. 卸载…...
动态住宅IP适合哪些数据采集项目?
在数据采集的广阔天地中,动态住宅IP代理能够灵活地变换身份,帮助我们在网络世界中自由地穿梭。这种代理IP因其住宅性质和动态变化的特点,成为了许多数据采集项目的理想选择。今天,我们就来聊聊动态住宅IP代理适合哪些数据采集项目…...
Git_撤销本地commit_查找仓库中大文件
Gitee普通账号的仓库总空间限制为5G; 右上角头像,下拉—》设置/账号设置—》数据管理下的仓库空间信息即可查看空间限额和各仓库空间大小;Gitee普通账号每次推送大小不能超过100MB,否则会推送失败;当提交大小超过100MB…...
golang windows打包为linux可执行文件
使用go的交叉编译功能 set GOOSlinux set GOARCHamd64然后再执行go build 可能会报异常, 所以贴出我的go env配置仅供参考 go env环境配置 D:\GoWork\src\go-tzv>go env set GO111MODULEauto set GOARCHamd64 set GOBIN …...
源码分析之Openlayers中GeometryCollection类
概述 本文主要介绍GeometryCollection类,GeometryCollection类继承于Geometry类,关于Geometry类,参考这篇文章源码分析之Openlayers中Geometry基类介绍 GeometryCollection类就是一组几何对象的集合. 源码分析 GeometryCollection类源码实现 GeometryCollection类源码实现…...