结构体--共用体--枚举 之难点——链表 奋力学习嵌入式的第十六天
结构体
注意:
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 引言 移动设备在我们的生活中扮演着越来越重要的角色,我们几乎把所有重要的信息都存储在这些设备上。然而,随着移动应用程序的数量不断增加,安全性也变得越来越关键。这就是为什么…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
