嵌入式学习日记 16

本文详细介绍了C语言中共用体的使用、初始化规则、实际应用,以及枚举类型的特点。同时涵盖了链表数据结构,包括链表的概念、数组与链表的对比,以及链表操作如创建空链表、插入节点(头插和尾插)的方法。
摘要由CSDN通过智能技术生成

共用体

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

注意:


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

  struct stu
  {
    char name[20];
    int sno;
    float score; 
  }
  
  
  struct teacher
  {
    char name[20];
    int Tno;
    float salary; 
  }
  
  struct member
  {
    char name[20];
    int no;
    union 
    {
        float score; 
        float salary; 
    }d;
  }

  6.共用体类型可以是函数参数,也可以是函数返回值类型 
  
    共用体,结构体类型定义出来之后,
    a.定义变量
    b.定义数组
    c.定义指针 
    d.做函数参数,返回值类型 
    

枚举:


  一枚一枚列举 
  逐个列举 
  
  如果一个变量只有几种可能的值,则可以定义为枚举类型。
  所谓“枚举”是指将变量的值一一列举出来,
  变量的值只限于列举出来的值的范围内。
  
  
eg:
   //从键盘输入1~7  
   打印出对应的英文的星期 
   
   1 ~ Monday
   
   
   幻数
   魔数
   
   
声明枚举类型用enum 开头。例如:
enum weekday
{
sun,
mon,
tue,
wed,
thu,
fri,
sat
};

enum //关键词 ---枚举 

enum  枚举类型名 
{
    sun,  //名字 --- 代表一个值 --- 符号常量 
    mon,
    tue,
    wed,
    thu,
    fri,
    sat
};

1 ~ 7
 

注意:


1.枚举  提高了代码可读性 
2.枚举 本质上是int类型 
  枚举 与 整型 类型兼容 
3.不足
  因为枚举类型 --- 本质上是个整型类型,
  所以枚举类型的变量的值,并不能真正限定在指定的哪些值范围中  
4.枚举类型 
  可以做函数 形参 和 返回值 
  定义数组也可以,本质上就是整型数据 
  
  
练习: 
   无人机 
   
   无人机的状态 
   
   0 --flying 
   1 --stop
   2 --holding 
   
  从键盘输入0~2 打印无人机的状态 
-------------------------------------------------

链表


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

数组:
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;
   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值