嵌入式学习笔记总结Day16

今天主要学习了共用体,枚举以及链表的相关知识。

一、共用体

共用体的一般形式如下:

union 共用体名
{
	成员列表//各个变量
}

注意:1.共用体的初始化只能给一个值,默认是给到第一个变量
2.共用体用的数据最终存储的 — 应该是最后一次给到的值。但是只能影响到 自己数据类型对应的空间中的数据
3.共用体的一个重要作用就是可以用来判断大小端,具体代码如下:

int isEndian(void)
{
	union demo
	{
		int a;
		char b;
	}d;
	d.a=1;
	return a.b;//如果程序返回的是1则为小端存储,反之则为大端存储;
}

具体原理为:共用体中的变量都是共用同一个地址存储的,那么当给a赋值1时,根据共用体的特点:其中的值是最后一次给到的值,所以b也是1,其作为数值的低位,如果是小端存储,那么那么读取出的值就是低地址中的值,若是大端存储,低位存储在高位地址中就读不到1。

4.共用体的实际用途:节省空间,转换数据类型

二、枚举

如果一个变量只有几种可能的值,则可以定义为枚举类型。 所谓“枚举”是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。声明枚举类型用enum 开头,如:

enum week
{
	sun,
	mon,
	wed,
	thu,
	fri,
	sat
};

注意:
1.枚举 提高了代码可读性
2.枚举 本质上是int类型
枚举 与 整型 类型兼容
3.不足
因为枚举类型 — 本质上是个整型类型,
所以枚举类型的变量的值,并不能真正限定在指定的哪些值范围中
4.枚举类型
可以做函数 形参 和 返回值
定义数组也可以,本质上就是整型数据

三、链表

1.概念

链表是一种数据结构,其与数组不同,数组可以通过下标灵活的访问其中的元素,但不方便对其中的数据进行修改。而链表则刚好相反,其可以方便的对数据进行修改,但不方便访问其中的数据。
链表是通过一个个节点连接起来。而每个节点都是定义的一个结构体类型的数据,其中包含两个部分,分别是数据域和指针域,数据存放数据,二指针域存放下一个节点的地址,通过指针域中的地址将一个个节点连接起来形成一个链表。在这里插入图片描述
每个节点的代码表示如下:

struct Node
{
	int data;
	struct Node *next;
}

链表分为有头链表和无头链表两种,区别就在于第一个节点是否为有效的数据节点。
另外还有空链表:其表示只有头节点,并且指针域为NULL.

2.链表的插入

链表有两种插入方法,头插法和尾查法,头查法即在头节点之后插入新节点,而尾插法则为在尾节点之后插入新节点。

2.1尾插法的代码表示
void pushBack(struct Node *head,int data)
{
    struct Node *pNew = malloc(sizeof(struct Node));//定义一个新节点,并将其放在堆区。
    struct Node *p = head;//定义一个可移动指针,指向头节点
    pNew->data=data;//在新节点中放入数据
    while(p->next !=NULL)//寻找尾节点的位置
    {
        p=p->next;
    }
    p->next = pNew;//找到尾节点后将要准备插入的新节点的地址放入尾节点的指针域中
    pNew->next = NULL;//新节点连接后作为新的尾节点
}
2.1头插法的代码表示
void pushFront(struct Node *head,int data)
{
    struct Node *pNew = malloc(sizeof(struct Node));//定义一个新节点
    struct Node *p = head;//定义一个可移动指针指向头节点
    pNew->data=data;//在新节点中放入数据
    pNew->next=p->next ;//将头节点指针域中的地址放入新节点中,使新节点插入之前头节点后头节点之后的节点之间。这一步也是链接了新节点与头节点之后的节点
    p->next=pNew;//将头节点的地址放入头节点的指针域中,完成头节点与新节点的链接。
}
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值