当前位置: 首页 > news >正文

结构体--共用体--枚举 之难点——链表 奋力学习嵌入式的第十六天

结构体

注意:

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

相关文章:

结构体--共用体--枚举 之难点——链表 奋力学习嵌入式的第十六天

结构体 注意&#xff1a; 1.结构体类型 可以定义在 函数里里面 但是此时作用域就被限定在该函数中 2.结构体定义形式 //形式一 限定一类型 后定义变量 struct stu { ... }; struct stu s; //形式二 定义类型的同时 定义变量 struct stu { ... }s1,s2,*s3,s4[10]; struc…...

猜凶手

日本某地发生了一件谋杀案&#xff0c;警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 以下为4个嫌疑犯的供词: A说&#xff1a;不是我。 B说&#xff1a;是C。 C说&#xff1a;是D。 D说&#xff1a;C在胡说 已知3个人说了真话&#xff0c;1个人说的是假话。 现在请根据这…...

python-自动化篇-运维-实现读取日志文件最后一行的时间

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

QT SQL

QT SQL模块提供数据库编程的支持&#xff0c;支持多种常见的数据库&#xff1a;MySQL\Oracle\MS SQL Server\SQLite等。SQL模块包含多个类&#xff0c;可以实现&#xff1a;数据库连接、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 自然语言处理(四)

原文&#xff1a;Natural Language Processing with Transformers 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第十章&#xff1a;从头开始训练变换器 在本书的开头段落中&#xff0c;我们提到了一个名为 GitHub Copilot 的复杂应用&#xff0c;它使用类似 GPT 的…...

BRAIN :帕金森病中与痴呆相关的动态功能连接改变

fMRI成像手段由于其在高空间分辨率的优势获得了疾病研究的青睐&#xff0c;越来越多的疾病研究使用fMRI手段来通过找到特异的神经标记物从而提升临床治疗的诊断效力以及准确率。但是&#xff0c;功能磁共振受到其时间分辨率相对较低这一缺点的影响&#xff0c;在对疾病时间特异…...

harmony os系统

因为实验室配的是Windows电脑&#xff0c;最近在搜索marginnote有没有windows的版本&#xff0c;不然好多功能相似的软件在使用不能信息同步是挺麻烦的。搜索结果当然还是没有对应版本。那我退而求其次&#xff0c;看看怎么在Windows上使用marginnote&#xff0c;结果大家意见基…...

2024美赛数学建模A题思路源码——七鳃鳗性别比例和生态系统关系

赛题目的:分析一个物种根据资源可用性改变其性别比例的能力的利弊。开发一个模型,分析对生态系统中由此产生的相互作用。 问题一.七鳃鳗性别比例对生态系统的影响 问题分析 建立一个简化版的模型,来探讨以下问题: 1.我们假设七鳃鳗种群的增长遵循Logistic生长模型,其中食…...

C语言的基础学习

C语言的变量 ## C语言中的变量 在C语言中,变量是对程序中数据所占内存空间的一种抽象定义。定义变量时,用户定义变量的名、变量的类型,这些都是变量的操作属性。不仅可以通过变量名访问该变量,系统还通过该标识符确定变量在内存中的位置 [❷](https://www.dotcpp.com/cour…...

PostGIS教程学习二十二:使用触发器追踪历史编辑操作

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

【PTA浙大版《C语言程序设计(第4版)》编程题】练习7-4 找出不是两个数组共有的元素(附测试点)

目录 输入格式: 输出格式: 输入样例: 输出样例: 代码呈现 测试点 给定两个整型数组&#xff0c;本题要求找出不是两者共有的元素。 输入格式: 输入分别在两行中给出两个整型数组&#xff0c;每行先给出正整数N&#xff08;≤20&#xff09;&#xff0c;随后是N个整数&a…...

C++面试:数据库不同存储引擎的区别以及如何选择

目录 基础 具体选择原则 Mysql如何选择 创建表时指定存储引擎 修改现有表的存储引擎 查看表的存储引擎 注意事项 总结 在数据库管理系统中&#xff0c;不同的存储引擎提供了不同的存储机制、索引技术、锁定水平和其他功能。以MySQL为例&#xff0c;它支持多种存储引擎&…...

HTML -- 常用标签

目录 HTML 标签 单标签 双标签 常见标签的使用 标题和段落 换行、分隔、超链接 列表标签 表单标签 属性 属性的使用 HTML HTML&#xff08;Hyper Text Markup Language&#xff09;&#xff0c;超文本标记语言&#xff0c;是一门标记语言&#xff0c;不是编程语言&am…...

【Qt】QInputDialog setGeometry: Unable to set geometry 问题

【Qt】QInputDialog setGeometry: Unable to set geometry 问题 文章目录 I - 问题背景II - 解决办法III - 参考链接 I - 问题背景 创建了一个 QMainWindow 并在上边创建了布局&#xff0c;尝试调用 QInputDialog 的 getInt 静态方法&#xff0c;结果运行时出现了以下警告 QW…...

Flink问题解决及性能调优-【Flink rocksDB读写state大对象导致背压问题调优】

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

代码随想录算法训练营第二十四天|● 理论基础 ● 77. 组合

仅做学习笔记&#xff0c;详细请访问代码随想录 ● 理论基础 ● 77. 组合 ● 理论基础 回溯法解决的问题 回溯法&#xff0c;一般可以解决如下几种问题&#xff1a; 组合问题&#xff1a;N个数里面按一定规则找出k个数的集合 切割问题&#xff1a;一个字符串按一定规则有几…...

买保险如何填健康告知

在投保健康险时&#xff0c;保险公司都有健康告知这一环&#xff0c;那么健康告知怎么机智的填&#xff1f; 人都吃五谷杂粮&#xff0c;身体免不了有各种小毛病&#xff0c;比如甲状腺结节等&#xff0c;健康告知通过不了怎么办&#xff1f; 健康告知是保险公司设计的健康问…...

云贝教育 | 【技术文章】Oracle 19c RAC修改网络

注: 本文为云贝教育 刘峰 原创&#xff0c;请尊重知识产权&#xff0c;转发请注明出处&#xff0c;不接受任何抄袭、和未经注明出处的转载。 原文链接&#xff1a;【Oracle 19c】Oracle 19c RAC修改网络 - 课程体系 - 云贝教育 (yunbee.net) 变更目标 ip类型 节点 原IP 目…...

Android SELinux:保护您的移动设备安全的关键

Android SELinux&#xff1a;保护您的移动设备安全的关键 1 引言 移动设备在我们的生活中扮演着越来越重要的角色&#xff0c;我们几乎把所有重要的信息都存储在这些设备上。然而&#xff0c;随着移动应用程序的数量不断增加&#xff0c;安全性也变得越来越关键。这就是为什么…...

第十三章认识Ajax(四)

认识FormData对象 FormData对象用于创建一个表示HTML表单数据的键值对集合。 它可以用于发送AJAX请求或通过XMLHttpRequest发送表单数据。 以下是FormData对象的一些作用: 收集表单数据:通过将FormData对象与表单元素关联,可以方便地收集表单中的数据。使用FormData对象,…...

使用 Node.js 和 Cheerio 爬取网站图片

写一个关于图片爬取的小案例 爬取效果 使用插件如下&#xff1a; {"dependencies": {"axios": "^1.6.0","cheerio": "^1.0.0-rc.12","request": "^2.88.2"} }新建一个config.js配置文件 // 爬取图片…...

2024美赛数学建模E题思路源码

赛题目的 可以将其拆解为以下主要问题&#xff0c;并为每个问题提出解决方案&#xff1a; 如何在极端天气事件越来越多的地区部署财产保险&#xff1f; 保险公司应在何时何地承保保单&#xff1f; 业主如何影响保险公司的承保决定&#xff1f; 如何建立能够评估未来房地产决…...

解决Docker AList本地挂载失效的问题。

解决Docker AList本地挂载失效的问题。 AList Docker version: 3.3 services:alist:image: xhofe/alist:latestcontainer_name: alistvolumes:- ./etc/alist:/opt/alist/data# 比如我要挂载/home,如果在docker里先挂载&#xff0c;是没法办法映射到linux系统下的/home的- /ho…...

Emmet常用语法总结

Emmet常用语法总结 子元素&#xff1a;>兄弟元素&#xff1a;上级元素&#xff1a;^倍数&#xff1a;*分组&#xff1a;&#xff08;&#xff09;属性&#xff1a;[]id和类&#xff1a;# .迭代数字&#xff1a;$文本内容&#xff1a;{}注意事项 Emmet是许多流行文本编辑器的…...

Android 12系统源码_页面管理(四)获取系统当前最上层的Activity信息

前言 很多应用开发人员&#xff0c;在日常开发过程中&#xff0c;经常会遇到一些需求&#xff0c;例如需要知道当前最上层的Activity是哪个&#xff0c;并结合这个Activity的名称来完成一些特定场景的需求。最简单的方法&#xff0c;是在创建Activity的时候将该Actvity存储到一…...

RK3588开发板Ubuntu与开发板使用U盘互传

1 将 U 盘(U 盘的格式必须为 FAT32 格式&#xff0c;大小在 32G 以下)插到开发板的 usb 接口&#xff0c;串口打印信息如下所示&#xff0c;U 盘的设备节点是/dev/sdb4。U 盘的设备节点不是固定的&#xff0c;根据实际情况来查看设备节点。 2 输入以下命令挂载 U 盘&#xff0c…...

【BUG】golang gorm导入数据库报错 “unexpected type clause.Expr“

帮同事排查一个gorm导入数据报错的问题 事发现场 ck sql CREATE TABLE ods_api.t_sms_jg_msg_callback_dis (app_key String DEFAULT COMMENT 应用标识,callback_type Int32 DEFAULT 0 COMMENT 0送达&#xff0c;1回执,channel Int32 DEFAULT 0 COMMENT uid下发的渠道,mode…...

TCP/IP网络模型

大家好我是苏麟 , 今天聊聊TCP/IP四层网络模型 . 资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) 应用层 最上层的&#xff0c;也是我们能直接接触到的就是应用层&#xff08;Application Layer&#xff09;&#xff0c;我们电脑或手机使用的应用软件都…...

github连不上

github连不上 错误提示解决方案steam 采用Hosts加速 错误提示 fatal: unable to access ‘https://github.com/Ada-design/qianduan.git/’: Failed to connect to github.com port 443 after 21073 ms: Couldn’t connect to server 解决方案 下载steam https://steampp.ne…...