数据结构[2016]
一、设有二维数组A[6][8],每个元素占6个字节存储,实现存放,A[0][0]的起始地址为1000,计算: (10分)
(1)数组最后一个元素A[5][7]的起始地址;
(2)按行优先存放时,元素A[1][4]的起始地址;
(3)按列优先存放时,元素A[4][7]的起始地址。
二、若有一棵二叉树,左右子树均有三个结点,其左子树的前序序列与中序序列相同,右子树的中序序列与后序序列相同,试构造该树。 (10分)
三、首先将下图所示的无向图给出其存储结构的邻接链表表示,然后写出对其分别进行深度优先遍历,广度优先遍历的结果。(10分)
四、已知一棵二叉树的前序遍历的结果是ABECDFGHIJ,中序遍历的结果是EBCDAFHIGJ,试画出这棵二叉树。(10分)
五、使用普里姆算法构造出如下图所示的图G的一棵最小生成树。(10分)
六、任意一个有n个结点的二叉树,已知它有m个叶子结点,试证明非叶子结点有(m-1)个度数为2,其余度数为1。(10分)
七、给出一组关键字(29,18,25,47,58,12,51,10),分别写出按下列各种排序方法进行排序时的变化过程:(15分)
(1)归并排序,每归并一次书写一个次序。
(2)快速排序,每划分一次书写一个次序。
(3)堆排序,先建成一个堆,然后每从堆顶取下一个元素后,将堆调整一次。
八、对关键字序列7,4,1,14,100,30,5,9,20,134,设哈希函数为H(X)=X MOD 13。试给出表长为13的哈希表(用线性探测开放定址法处理冲突)。(15分)
九、假定用于通信的电文仅由8个字母cl,c2,c3,c4,c5,c6,c7,c8组成,各字母在电文中出现的频率分别为5,25,3,6,10,11,36,4。试为这8个字母设计不等长Huffman编码,并给出该电文的总码数。(15分)
十、试写一个双向冒泡排序的算法,即在排序过程中交替改变扫描方向。(15分)
#include <stdio.h>
// 双向冒泡排序函数
void cocktailSort(int arr[], int n) {
int swapped, start, end;
do {
swapped = 0;
// 从左到右,类似于普通的冒泡排序
for (int i = start; i < end - 1; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
swapped = 1;
}
}
if (!swapped)
break;
swapped = 0;
end--;
// 从右到左,反向冒泡
for (int i = end - 1; i >= start; i--) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
swapped = 1;
}
}
start++;
} while (swapped);
}
int main() {
int arr[] = {5, 1, 4, 2, 8, 0, 2};
int n = sizeof(arr) / sizeof(arr[0]);
printf("Original array: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
cocktailSort(arr, n);
printf("Sorted array: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
十一、编写程序求1!+2!+3!+4!+…+30!之和。(15分)
#include <stdio.h>
#include <stdlib.h>
// 计算阶乘
unsigned long long factorial(unsigned int n) {
unsigned long long fact = 1;
for (unsigned int i = 1; i <= n; ++i) {
fact *= i;
}
return fact;
}
int main() {
unsigned long long sum = 0;
unsigned long long currentFactorial;
// 计算从 1! 到 30! 的阶乘之和
for (unsigned int i = 1; i <= 30; ++i) {
currentFactorial = factorial(i);
sum += currentFactorial;
printf("Sum up to %u!: %llu\n", i, sum);
}
printf("Sum of factorials from 1! to 30!: %llu\n", sum);
return 0;
}
十二、定义一个通讯录结构,成员包括:姓名(字符串)、电话(字符串)、生日(日期结构:年、月、日)。编写函数实现数据的输入、输出和按姓名查找。(15分)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义日期结构
typedef struct {
int year;
int month;
int day;
} Date;
// 定义通讯录结构
typedef struct {
char name[50]; // 姓名
char phone[20]; // 电话
Date birthday; // 生日
} Contact;
// 输入通讯录信息
void inputContact(Contact *contact) {
printf("Enter name: ");
fgets(contact->name, sizeof(contact->name), stdin);
contact->name[strcspn(contact->name, "\n")] = '\0'; // 去掉换行符
printf("Enter phone: ");
fgets(contact->phone, sizeof(contact->phone), stdin);
contact->phone[strcspn(contact->phone, "\n")] = '\0'; // 去掉换行符
printf("Enter birthday (YYYY MM DD): ");
scanf("%d %d %d", &contact->birthday.year, &contact->birthday.month, &contact->birthday.day);
getchar(); // 吃掉换行符
}
// 输出通讯录信息
void outputContact(const Contact *contact) {
printf("Name: %s\n", contact->name);
printf("Phone: %s\n", contact->phone);
printf("Birthday: %d-%02d-%02d\n", contact->birthday.year, contact->birthday.month, contact->birthday.day);
}
// 按姓名查找通讯录信息
int findContactByName(const Contact *contacts, int n, const char *name) {
for (int i = 0; i < n; i++) {
if (strcmp(contacts[i].name, name) == 0) {
outputContact(&contacts[i]);
return 1; // 找到了
}
}
return 0; // 没找到
}
int main() {
int n;
printf("Enter the number of contacts: ");
scanf("%d", &n);
getchar(); // 吃掉换行符
Contact contacts[n]; // 通讯录数组
// 输入通讯录信息
for (int i = 0; i < n; i++) {
printf("Enter details for contact %d:\n", i + 1);
inputContact(&contacts[i]);
}
// 输出通讯录信息
printf("\nContacts:\n");
for (int i = 0; i < n; i++) {
outputContact(&contacts[i]);
}
// 按姓名查找通讯录信息
char searchName[50];
printf("\nEnter name to search: ");
fgets(searchName, sizeof(searchName), stdin);
searchName[strcspn(searchName, "\n")] = '\0'; // 去掉换行符
if (findContactByName(contacts, n, searchName)) {
printf("Contact found.\n");
} else
相关文章:
数据结构[2016]
一、设有二维数组A[6][8],每个元素占6个字节存储,实现存放,A[0][0]的起始地址为1000,计算: (10分) (1)数组最后一个元素A[5][7]的起始地址; (2)按行优先存放时,元素A[1][4]的起始地址; (3)按列优先存放时…...
DBAPI连接阿里云 maxcompute 报错
使用正确的驱动包 访问以下链接寻找驱动包 https://github.com/aliyun/aliyun-odps-jdbc/releases/tag/v3.4.3 注意要使用odps-jdbc-3.4.3-jar-with-dependencies.jar ,这个是完整的jar包 不要使用odps-jdbc-3.4.3.jar,这个不是完整的,它还…...
Web3对社交媒体的影响:重新定义用户互动方式
随着互联网的发展和人们对隐私、安全、所有权的需求不断提高,Web3 的概念逐渐深入人心。Web3 的出现标志着一个去中心化、用户主导的网络时代的到来,这也将对社交媒体产生深远的影响。Web3 不仅推动社交媒体从中心化模式向用户主导的去中心化模式转变&am…...
【LeetCode】【算法】322. 零钱兑换
LeetCode 322. 零钱兑换 题目 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回-1。 你可以认为每…...
人工智能技术:未来生活的“魔法师”
想象一下,未来的某一天,你醒来时,智能助手已经为你准备好了早餐,你的智能家居系统根据你的心情和日程安排调整了室内的光线和音乐,而你的自动驾驶汽车已经在门口等你。这不是科幻小说,这是人工智能技术为我…...
docker加载目录中所有的镜像
docker加载目录中所有的镜像 首先我们知道读取单个命令如下: docker load -i example_image.tar.gz读取两三个也是: docker load -i image1.tar.gz image2.tar.gz image3.tar.gz但是如果是几十个,那么上面的命令就显得捉襟见肘了;比如当前我有个image…...
使用免费的飞书机器人,实现消息推送实时通知
大家好,我是小悟。 实际工作中,我们会经常遇到需要给用户发送业务通知的功能需求,如果是小程序端,那么就使用小程序提供的模板消息通知,如果是APP端,一般就是使用个推、极光等第三方平台。 当然还有个万能…...
各种网络设备的工作原理
网络设备的工作原理涉及多种设备,包括路由器、交换机、防火墙等,它们各自承担着不同的功能。以下是对这些设备工作原理的详细解释: 一、路由器路由器是互联网通信中的关键设备,它负责在不同网络之间传输数据包。功能:路…...
FilterListener组件
文章目录 Java Web三大组件一、Filter概述二、Filter开始1_过滤器API介绍2_过滤器开发步骤3_代码实现4_过滤器执行流程小结 三、使用细节1_生命周期2_拦截路径3_过滤器链 四、Listener1_Listener概述2_监听器举例3_Listener开始4_案例:模拟spring框架 Java Web三大组件 组件: 是…...
使用Ubuntu快速部署MinIO对象存储
想拥有自己的私有云存储,安全可靠又高效?MinIO是你的理想选择!这篇文章将手把手教你如何在Ubuntu 22.04服务器上部署MinIO,并使用Nginx反向代理和Let’s Encrypt证书进行安全加固。 即使你是新手,也能轻松完成…...
基于Liquid State Machine的时间序列预测:利用储备池计算实现高效建模
Liquid State Machine (LSM) 是一种 脉冲神经网络 (Spiking Neural Network, SNN) ,在计算神经科学和机器学习领域中得到广泛应用,特别适用于处理 时变或动态数据。它是受大脑自然信息处理过程启发而提出的一种 脉冲神经网络 。 设想你正处于一片平静的湖面,四周环绕着高山,你向…...
oracle使用CTE递归分解字符串
oracle使用CTE递归分解字符串 背景 给定一个不定长度字符串 并且以,分割例如 ‘1,2,3,4’ 使用sql查询 返回1,2,3,4四行 如果‘1,2’ 则返回 1,2 两行 使用sql实现 实…...
华为HarmonyOS借助AR引擎帮助应用实现虚拟与现实交互的能力5-识别平面语义
对于检测到的平面,您可以通过AR Engine识别该平面的语义,包括墙面、地面、座椅面、桌面、天花板、门面、窗面、床面。 创建AR会话 创建AR会话并配置为平面语义识别模式。 AREngine_ARSession *arSession nullptr;// 创建AR会话。HMS_AREngine_ARSessi…...
MAC 安装 brew及其常用命令
文章:Mac安装brew的四种方法(指定能行) 以下是在 Mac 上使用 Homebrew 清理缓存和无用包的详细指南: 1. 查看系统状态 # 诊断系统问题 brew doctor# 查看已安装的包 brew list# 查看系统占用空间 brew cleanup -n # 预览需要…...
nVisual标签打印模块的部署与使用
部署 标签打印模块部署需要注意的是 前置条件 标签打印模块是以外部模块形式依附于nVisual主模块的,所以要先部署好nVisual主模块的前后端程序。 部署文件下载 标签打印模块也分前端文件和后端文件,从微盘->软件发布->nVisual official relea…...
python NLTK快速入门
目录 NLTK简介安装NLTK主要模块及用法 词汇与语料库分词与词性标注句法分析情感分析文本分类综合实例:简单的文本分析项目总结 1. NLTK简介 NLTK(Natural Language Toolkit)是一个强大的Python库,专门用于自然语言处理ÿ…...
技术速递|.NET 9 中 System.Text.Json 的新增功能
作者:Eirik Tsarpalis - 首席软件工程师 排版:Alan Wang System.Text.Json 的9.0 版本包含许多功能,主要侧重于 JSON 架构和智能应用程序支持。它还包括一些备受期待的增强功能,例如可空引用类型支持、自定义枚举成员名称、无序元…...
LLM 使用 Elastic 实现可观察性:Azure OpenAI (二)
作者:来自 Elastic Muthukumar Paramasivam•Lalit Satapathy 我们为 Azure OpenAI GA 包添加了更多功能,现在提供提示和响应监控、PTU 部署性能跟踪和计费洞察! 我们最近宣布了 Azure OpenAI 集成的 GA。你可以在我们之前的博客 LLM 可观察性…...
数据库基础(2) . 安装MySQL
0.增加右键菜单选项 添加 管理员cmd 到鼠标右键 运行 reg文件 在注册表中添加信息 这样在右键菜单中就有以管理员身份打开命令行的选项了 1.获取安装程序 网址: https://dev.mysql.com/downloads/mysql/ 到官网下载MySQL8 的zip包, 然后解压 下载后的包为: mysql-8.0.16-…...
高效自动化测试,引领汽车座舱新纪元——实车篇
引言 作为智能网联汽车的核心组成部分,智能座舱不仅是驾驶者与车辆互动的桥梁,更是个性化、智能化体验的源泉。实车测试作为验证智能座舱功能实现、用户体验、行车安全及法规符合性的关键环节,能够最直接地模拟真实驾驶场景,确保…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
