结构体--共用体--枚举 之难点——链表 奋力学习嵌入式的第十六天
结构体
注意:
1.结构体类型 可以定义在 函数里里面 但是此时作用域就被限定在该函数中
2.结构体定义形式
//形式一 限定一类型 后定义变量
struct stu
{
...
};
struct stu s;
//形式二 定义类型的同时 定义变量
struct stu
{
...
}s1,s2,*s3,s4[10];
struct stu s;
//形式三 省略了类型名-----只在使用一次的时候使用
struct
{
...
}s1,s2,*s3,s4[10];
考点:
自然边界对齐
int ------四字节------能被4整除的地址编号
shout----二字节-----能被2整除的地址编号
char-----一字节------能被1整除的地址编号
共用体
union 共用体名
{
成员列表
}; //表示定义一个共用体类型
注意:
1.初始化时 只能能给到一个值 默认是给到第一个成员变量的
2.共用体成员辅助
共用体用的数据最终储存的------是最后一次给到的值
但是只能影响到 自己数据类型对用空间中的数据
3.可以判断大小端
#include <stdio.h>union dome
{int a;short b;char c;
};int main (void)
{union dome s;s.a=0x12345678;s.b=0x1298;s.c='c';printf ("a=%#x\n",s.a);printf ("b=%#x\n",s.b);printf ("c=%#hhx\n",s.c);return 0;
}
a=0x12341263
b=0x1263
c=0x63
4.实际用途:节约空间 、 进行数据转换
5.共用体的大小:是成员变量中是最大的那个成员的大小
6.共用体类型可以是参数 也可以是函数返回值类型
共用体,结构体类型定义出来之后:
a.定义变量;
b.定义数组;
c.定义指针;
d.做函数参数,返回值类型
枚举
一枚一枚的列举
逐个列举
如果一个变量只有几种可能的值,则可以定义为枚举类型。所谓"枚举”是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。
eg:
//从键盘输入l~7
打印出对应的英文的星期
声明枚举类型用enum开头。
例如:
enum weekday //枚举类型名
{
sun , //名字---代表一个值-----符号常量
mon ,
tue ,
wed ,
thu ,
fri,
sat
};
enum //关健词---枚举
注意:
1.枚举提高了代码的可读性
2.枚举本质上是int型
枚举与整型互相兼容
3.不足:因为枚举类型本质上是一个整型类型 所以枚举类型的变量的值 并不能真正限定在指定的那些范围中
4.枚举类型可以做函数的形参和返回值,定义数组也可以,同时枚举类型本质上就是整形数据
练习:
无人机
无人机的状态
0 --flying
1 --stop
2 --holding
从键盘输入0~2 打印无人机的状态
#include <stdio.h>enum Flight_status
{flying,stop,holding
};int main (void)
{int a;printf ("intput number : \n");scanf ("%d",&a);switch (a){case flying:printf ("flying\n");break;case stop:printf ("stop\n");break;case holding:printf ("holding\n");break;}return 0;
}
链表
数据结构:
数据的组织形式(逻辑上理解的形式)
数组:连续性 有序性 单一性
数据的组织形式会----------决定使用数据的算法
数组的优点://随机访问很方便
缺点://增加数据就会很不方便 删除数据也不方便
链表:链式的数据表
优点: 增加删除数据很方便
缺点:找数据很不太方便
计算机中如何体现来来链式数据结构?
存放链式数据的结构:节点
[数据 | 另一个节点的指针]
一个节点:数据结构对应算法----的操作
操作:
1.创建一个链表----空链表
//有头链表----可以更方便的处理链表
//无头链表
c语言阶段:有头单向列表
相关概念:
1.节点
2.头节点---数据域值随机
3.首节点---第一个保存有效数据的节点
4.尾节点---链表的最后一个有效节点 NULL
空链表:
特点:只有头节点 并且头节点的指针域为 NULL //相当于是尾节点
strcut Node head = {0,NULL};
struct Node *p = &head;
2.链表的插入
创建一个新的节点 将节点连接起来
尾插:
头插:
#include <stdio.h>
#include <stdlib.h>//****************************************
#if 1
struct Node
{int data;struct Node *next;
};void pushBack(struct Node *head,int data) //尾插形式链表
{struct Node *pNew = malloc (sizeof (struct Node)); //开辟一个新节点的空间放在堆区pNew->data=data; //将定义的数值放在新节点的数值域中struct Node *p = head; // 定义一个结构体指针p指在头节点处 while (p->next != NULL){p = p->next; //让p指向下一个节点 直到指到尾节点}p->next = pNew;pNew->next = NULL; //将尾节点的指针域定义为空
}int isPuanduan (struct Node *head)
{if (head->next==NULL) //判断头节点是否为空 空则返回1 不是空则返回0{return 1;}else{return 0;}
}void PrintLinklist(struct Node *head) //打印整个链表的数据函数
{struct Node *p = head; //定义一个结构体指针p指在头节点处 if (isPuanduan(head)==0) // 如果头链表不是空 则将头链表的指针域给到p{p = head->next;while(p != NULL) // 判断指针域是否为空 {printf ("%d\n",p->data); // 不是空就打印出每个链表中数据域的元素p = p->next;}}
}int lens(struct Node *head) //统计链表长度
{int cont=0; struct Node *p = head->next; //定义一个结构体指针p 指向头结点的地址while(p->next != NULL) //判断每个链表的指针域是否为空{cont++;p = p->next; //是则进入循环 并记录次数 指针p则继续指向下一个链表继续判断}return cont;
}void Head_insert(struct Node *head,int data) //头插形式链表函数
{struct Node *pNew = malloc(sizeof(struct Node)); //定义一个结构体类型的空间 地址放在堆区pNew->data = data; //将定义好的数据放到新定义的节点中struct Node *p = head; //定义一个结构体指针 记录首节点的位置pNew->next = head->next; //将首节点中装的地址放到新节点中p->next = pNew; //再将新节点本身的地址放到首节点的指针域中}int main (void)
{struct Node head;head.next = NULL; //定义一个空链表pushBack(&head,1); //将想要打印的数组值传到尾插链表函数中pushBack(&head,2);pushBack(&head,3);pushBack(&head,4);pushBack(&head,5);pushBack(&head,6);pushBack(&head,7);// PrintLinklist(&head);printf ("len=%d\n",lens(&head)); //打印整个链表的长度Head_insert(&head,8);Head_insert(&head,9); //将想要打印的数组值传到头插链表函数中Head_insert(&head,10);Head_insert(&head,11);Head_insert(&head,12);Head_insert(&head,13);PrintLinklist(&head); //将整个链表的数据打出来return 0;
}
#endif
相关文章:

结构体--共用体--枚举 之难点——链表 奋力学习嵌入式的第十六天
结构体 注意: 1.结构体类型 可以定义在 函数里里面 但是此时作用域就被限定在该函数中 2.结构体定义形式 //形式一 限定一类型 后定义变量 struct stu { ... }; struct stu s; //形式二 定义类型的同时 定义变量 struct stu { ... }s1,s2,*s3,s4[10]; struc…...
猜凶手
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 以下为4个嫌疑犯的供词: A说:不是我。 B说:是C。 C说:是D。 D说:C在胡说 已知3个人说了真话,1个人说的是假话。 现在请根据这…...

python-自动化篇-运维-实现读取日志文件最后一行的时间
文章目录 1. 使用Python打开日志文件2.python读取文件最后一行两种方式3.读取当前时间,进行两者相减,超时报警4.将内容推送到企业微信5. 关闭日志文件整体代码 1. 使用Python打开日志文件 在开始实时读取日志文件之前,我们首先需要打开一个日…...

QT SQL
QT SQL模块提供数据库编程的支持,支持多种常见的数据库:MySQL\Oracle\MS SQL Server\SQLite等。SQL模块包含多个类,可以实现:数据库连接、SQL语句执行、数据获取与界面显示 等功能。数据 与 界面间用Model\View架构。 一、 二、Q…...
C++(20):通过concept及nlohmann将数据转换为字符串
nlohmann可以自动兼容将C++的很多原生类型转换为json,甚至自定义类型也不需要太复杂的操作就可以转换为json,可以利用这一点将数据转换为string: #include <nlohmann/json.hpp> #include <string> #include <vector> #include <tuple> #include <…...

Transformer 自然语言处理(四)
原文:Natural Language Processing with Transformers 译者:飞龙 协议:CC BY-NC-SA 4.0 第十章:从头开始训练变换器 在本书的开头段落中,我们提到了一个名为 GitHub Copilot 的复杂应用,它使用类似 GPT 的…...

BRAIN :帕金森病中与痴呆相关的动态功能连接改变
fMRI成像手段由于其在高空间分辨率的优势获得了疾病研究的青睐,越来越多的疾病研究使用fMRI手段来通过找到特异的神经标记物从而提升临床治疗的诊断效力以及准确率。但是,功能磁共振受到其时间分辨率相对较低这一缺点的影响,在对疾病时间特异…...
harmony os系统
因为实验室配的是Windows电脑,最近在搜索marginnote有没有windows的版本,不然好多功能相似的软件在使用不能信息同步是挺麻烦的。搜索结果当然还是没有对应版本。那我退而求其次,看看怎么在Windows上使用marginnote,结果大家意见基…...

2024美赛数学建模A题思路源码——七鳃鳗性别比例和生态系统关系
赛题目的:分析一个物种根据资源可用性改变其性别比例的能力的利弊。开发一个模型,分析对生态系统中由此产生的相互作用。 问题一.七鳃鳗性别比例对生态系统的影响 问题分析 建立一个简化版的模型,来探讨以下问题: 1.我们假设七鳃鳗种群的增长遵循Logistic生长模型,其中食…...
C语言的基础学习
C语言的变量 ## C语言中的变量 在C语言中,变量是对程序中数据所占内存空间的一种抽象定义。定义变量时,用户定义变量的名、变量的类型,这些都是变量的操作属性。不仅可以通过变量名访问该变量,系统还通过该标识符确定变量在内存中的位置 [❷](https://www.dotcpp.com/cour…...

PostGIS教程学习二十二:使用触发器追踪历史编辑操作
PostGIS教程学习二十二:使用触发器追踪历史编辑操作 生产环境下数据库的一个常见要求是能够跟踪用户编辑数据的历史:数据在两个日期之间是如何变化的,是谁操作的,以及它们哪些内容变化了?一些GIS系统通过在客户端接口…...

【PTA浙大版《C语言程序设计(第4版)》编程题】练习7-4 找出不是两个数组共有的元素(附测试点)
目录 输入格式: 输出格式: 输入样例: 输出样例: 代码呈现 测试点 给定两个整型数组,本题要求找出不是两者共有的元素。 输入格式: 输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数&a…...
C++面试:数据库不同存储引擎的区别以及如何选择
目录 基础 具体选择原则 Mysql如何选择 创建表时指定存储引擎 修改现有表的存储引擎 查看表的存储引擎 注意事项 总结 在数据库管理系统中,不同的存储引擎提供了不同的存储机制、索引技术、锁定水平和其他功能。以MySQL为例,它支持多种存储引擎&…...

HTML -- 常用标签
目录 HTML 标签 单标签 双标签 常见标签的使用 标题和段落 换行、分隔、超链接 列表标签 表单标签 属性 属性的使用 HTML HTML(Hyper Text Markup Language),超文本标记语言,是一门标记语言,不是编程语言&am…...
【Qt】QInputDialog setGeometry: Unable to set geometry 问题
【Qt】QInputDialog setGeometry: Unable to set geometry 问题 文章目录 I - 问题背景II - 解决办法III - 参考链接 I - 问题背景 创建了一个 QMainWindow 并在上边创建了布局,尝试调用 QInputDialog 的 getInt 静态方法,结果运行时出现了以下警告 QW…...

Flink问题解决及性能调优-【Flink rocksDB读写state大对象导致背压问题调优】
RocksDB是Flink中用于持久化状态的默认后端,它提供了高性能和可靠的状态存储。然而,当处理大型状态并频繁读写时,可能会导致背压问题,因为RocksDB需要从磁盘读取和写入数据,而这可能成为瓶颈。 遇到的问题 Flink开发…...

代码随想录算法训练营第二十四天|● 理论基础 ● 77. 组合
仅做学习笔记,详细请访问代码随想录 ● 理论基础 ● 77. 组合 ● 理论基础 回溯法解决的问题 回溯法,一般可以解决如下几种问题: 组合问题:N个数里面按一定规则找出k个数的集合 切割问题:一个字符串按一定规则有几…...
买保险如何填健康告知
在投保健康险时,保险公司都有健康告知这一环,那么健康告知怎么机智的填? 人都吃五谷杂粮,身体免不了有各种小毛病,比如甲状腺结节等,健康告知通过不了怎么办? 健康告知是保险公司设计的健康问…...
云贝教育 | 【技术文章】Oracle 19c RAC修改网络
注: 本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、和未经注明出处的转载。 原文链接:【Oracle 19c】Oracle 19c RAC修改网络 - 课程体系 - 云贝教育 (yunbee.net) 变更目标 ip类型 节点 原IP 目…...

Android SELinux:保护您的移动设备安全的关键
Android SELinux:保护您的移动设备安全的关键 1 引言 移动设备在我们的生活中扮演着越来越重要的角色,我们几乎把所有重要的信息都存储在这些设备上。然而,随着移动应用程序的数量不断增加,安全性也变得越来越关键。这就是为什么…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...