嵌入式16——共用体+枚举+链表

这篇具有很好参考价值的文章主要介绍了嵌入式16——共用体+枚举+链表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、共用体

union 共用体名
{
  成员列表; //各个变量 
};
//表示定义一个共用体类型 


注意:
1.共用体 
  初始化 --- 只能给一个值,默认是给到第一个成员变量的
2.共用体成员变量辅助 
  共用体用的数据最终存储的 --- 应该是最后一次给到的值。
  但是只能影响到 自己数据类型对应的空间中的数据
3.可以判断大小端 
4.实际用途 
  a.节省空间 
  b.进行数据转换 
  192.168.1.169 //ip本质是个 32位的数值   
5.共用体的大小  --是成员变量中最大的那个成员的大小

6.共用体类型可以是函数参数,也可以是函数返回值类型 
  
    共用体,结构体类型定义出来之后,
    a.定义变量
    b.定义数组
    c.定义指针 
    d.做函数参数,返回值类型 
    
二、枚举:
  一枚一枚列举 
  逐个列举 
  
  如果一个变量只有几种可能的值,则可以定义为枚举类型。
  所谓“枚举”是指将变量的值一一列举出来,
  变量的值只限于列举出来的值的范围内。
   
声明枚举类型用enum 开头。例如:
enum weekday
{
sun,
mon,
tue,
wed,
thu,
fri,
sat
};

enum //关键词 ---枚举 

enum  枚举类型名 
{
    sun,  //名字 --- 代表一个值 --- 符号常量 
    mon,
    tue,
    wed,
    thu,
    fri,
    sat
};
注意:
1.枚举  提高了代码可读性 
2.枚举 本质上是int类型 
  枚举 与 整型 类型兼容 
3.不足
  因为枚举类型 --- 本质上是个整型类型,
  所以枚举类型的变量的值,并不能真正限定在指定的哪些值范围中  
4.枚举类型 
  可以做函数 形参 和 返回值 
  定义数组也可以,本质上就是整型数据 

三、链表
数据结构:
   数据的组织形式 (逻辑上理解的形式)
   

数组:
int a[10] = {1,2,3,4,5,6,7,8,9,10}; //连续性,有序性,单一性 


数据组织形式 ---会决定使用数据的算法 

选择排序:

for (i = 0; i < len-1; ++i)
{
    for (j = i+1; j < len; ++j)
    {
       if (a[j] < a[i])
       {
         交换
       }
    }
}

struct stu[n] = {};

n = 30


数组: //顺序表 
   优点:
     //随机访问 方便 
   缺点:
     增加数据 不方便 
     删除数据 不方便 
     
链表:  链式的数据表 

狗链 //找数据  
 优点:
    增加 删除数据很方便 
 缺点:
    找数据不大方便 
    
计算机中:
   计算机如何体现链式数据结构
   
   [数据1]   
   [数据2]
     
   存放链式数据的结构:
   节点 
   [数据|另外一个节点指针] 

   
[数据1|指针] //节点 
[数据2|指针]
[数据3|指针]


[数据域|指针域]

学生信息

节点:
struct Node
{
//数据域 
  struct stu s;
//指针域
  struct Node *p; //指针类型 
}; 

//一个节点 
数据结构对应算法  --- 操作 

1.
2.增加数据 方便
3.删除数据 方便 

操作:
1.创建一个链表 -- 空链表 

  //有头链表  --可以更方便的处理链表
  //无头链表 
  

 c语言阶段: 
 有头 单向链表 
 
 空链表:
 特点:
  只有头节点
  并且头节点的指针域 为NULL //相当于是尾节点

strcut Node head = {0,NULL};
struct Node *p = &head;  
2.插入 
  创建一个新的节点 
  节点链接起来
  
  //尾插  
  思路:
     s1.创建一个新的节点
       struct Node *pNew = malloc(sizeof(struct Node)); 
       //放在了堆区 
       //
     s2.找到尾节点 
       struct Node *p = &head;  //此时p在头节点 
       while( p->next != NULL )
       {
          p = p->next; //让p指向下一个节点 
       }
     s3.链接到尾节点后面
      p->next  = pNew;    
      pNew->next = NULL; //尾节点 
    
   void pushBack(struct Node *head)
   {
       s1.创建一个新的节点
       struct Node *pNew = malloc(sizeof(struct Node)); 
       //放在了堆区 
       //
     s2.找到尾节点 
       struct Node *p = head;  //此时p在头节点 
       while( p->next != NULL )
       {
          p = p->next; //让p指向下一个节点 
       }
     s3.链接到尾节点后面
      p->next  = pNew;    
      pNew->next = NULL; //尾节点 
   }
   ---------------------------------------------------
   int length(struct Node *head)
   {
      //统计有效节点的个数 
   }
 -----------------------------------------------------------   
    //头插  
   void pushFront(struc Node *head,int data)
   {
      //1.创建新节点
      pNew 
      //2.链接 
      pNew->next = p->next;
      p->next = pNew;
   }
3.空链表 
注意:
  函数不能返回,局部变量地址  
操作:
1.创建空链表
2.头插
3.尾插 
4.链表遍历 
5.链表的长度

删除:

void popFront(struct Node *head)
{
   //1.p指针变量 指向首节点
   //2.断开链表 
      head->next = p->next;
   //3.释放p所在的节点 
   free(p);

--------------------------------------
void void popBack(struct Node *head)
{
   //1.p定位到尾节点的前一个节点 
   while (p->next->next != NULL)
   {
     p = p->next;
   }
   
   //2.释放 p->next
   //3.p所在节点成为了新的尾节点 
   p->next = NULL;
}文章来源地址https://www.toymoban.com/news/detail-829139.html

到了这里,关于嵌入式16——共用体+枚举+链表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式内核链表list_head,如何管理不同类型节点的实现

             在Linux内核中,提供了一个用来创建双向循环链表的结构 list_head。虽然linux内核是用C语言写的,但是list_head的引入,使得内核数据结构也可以拥有面向对象的特性,通过使用操作list_head 的通用接口很容易实现代码的重用,有点类似于C++的继承机制(希望有机会写篇

    2024年02月20日
    浏览(49)
  • 【ARM 嵌入式 编译 Makefile 系列 16 - Makefile 伪目标.PHONY 与 FORCE 详细介绍】

    请阅读 【ARM GCC Makefile 编译专栏导读】 .PHONY 是GNU make的一个特殊目标,它用来指定那些不产生文件的目标。如果一个目标被声明为 .PHONY ,那么make命令会忽略这个目标的文件名,即使在文件系统中存在同名的文件,make命令也会每次都执行这个目标的命令 在 Makefile 中, 目标

    2024年02月12日
    浏览(42)
  • 嵌入式操作系统(嵌入式学习)

    嵌入式操作系统是一种专门设计和优化用于嵌入式系统的操作系统。它是在资源受限的嵌入式设备上运行的操作系统,如微控制器、嵌入式处理器和系统芯片等。 嵌入式操作系统的主要目标是提供对硬件资源的有效管理和对应用程序的调度,以实现系统的可靠性、实时性和效

    2024年02月10日
    浏览(56)
  • 适合嵌入式开发的GUI(嵌入式学习)

    嵌入式开发中的GUI(图形用户界面)是指在嵌入式系统中实现图形化的用户界面,以便用户可以通过触摸屏、按钮、鼠标或其他输入设备与系统进行交互。 以下是一些常见的嵌入式GUI开发方法: 轻量级GUI库:一些轻量级的GUI库适用于嵌入式系统,例如uGFX、LittlevGL、Nanogui等。

    2024年02月09日
    浏览(67)
  • 【嵌入式学习笔记】嵌入式入门2——中断(外部中断)

    打断CPU执行正常的程序,转而处理紧急程序,然后返回原暂停的程序继续运行,就叫中断 作用1: 实时控制在确定时间内对相应事件作出响应 ——定时器中断 作用2: 故障处理检测到故障,需要第一时间处理 ——外部中断 作用3: 数据传输不确定数据何时会来 ——串口中断

    2024年02月08日
    浏览(71)
  • 嵌入式开发:单片机嵌入式Linux学习路径

    SOC(System on a Chip)的本质区别在于架构和功能。低端SOC如基于Cortex-M架构的芯片,如STM32和NXP LPC1xxx系列,不具备MMU(Memory Management Unit),适用于轻量级实时操作系统如uCOS和FreeRTOS。高端SOC如基于Cortex-A架构的芯片,如三星、高通、飞卡、全志和瑞芯微等,具备MMU,支持虚拟内

    2024年02月15日
    浏览(54)
  • 【嵌入式——C++】算法(STL)

    需要引入头文件 #include algorithm 遍历容器。 代码示例 搬运容器到另一个容器中。参数1 原容器起始迭代器,参数2 原容器结束迭代器,参数3 目标容器开始迭代器 参数4 函数或者仿函数。 代码示例 查找元素,查找指定元素,找到返回指定元素的迭代器,找不到返回结束迭代器

    2024年02月19日
    浏览(40)
  • 【嵌入式学习笔记】嵌入式基础9——STM32启动过程

    程序段交叉引用关系(Section Cross References):描述各文件之间函数调用关系 删除映像未使用的程序段(Removing Unused input sections from the image):描述工程中未用到被删除的冗余程序段(函数/数据) 映像符号表(Image Symbol Table):描述各符号(程序段/数据)在存储器中的地址、类

    2024年02月15日
    浏览(81)
  • 嵌入式算法开发系列之图像处理算法

    在嵌入式系统中,图像处理算法是一项重要的技术,用于实现各种视觉应用,如机器视觉、监控系统和智能设备。本文将探讨图像处理算法的原理、应用以及如何使用 C 语言来实现这些算法。 图像处理算法涉及处理数字图像的各个方面,包括图像增强、滤波、特征提取、目标

    2024年04月16日
    浏览(49)
  • 嵌入式教学实验箱_数字信号处理实验箱_操作教程:5-16 灰度图像线性变换(LCD显示)

    学习灰度图像线性变换的原理,掌握图像的读取方法,并实现在LCD上显示线性变换前后的图像。 一般成像系统只具有一定的亮度范围,亮度的最大值与最小值之比称为对比度。由于形成图像的系统亮度有限,常出现对比度不足的弊病,使人眼观看图像时视觉效果很差,通过灰

    2024年02月03日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包