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

结构体

注意:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/363703.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

iMazing 3中文版双平台版本同步,iOS 设备在 Windows 上也能自动备份了

自从WWDC 2019 宣布 iTunes 退役后&#xff0c;也许很多小伙伴都对「上位者」iMazing 有所耳闻。 这款设计更加人性化、功能细致强大的 iOS 备份管理工具。 iMazing 支持在 Windows 及 Mac 上运行&#xff0c;而这个月 Windows 版本更新至 2.17. 之后&#xff0c;iMazing 的双…

09 二叉树链式结构

目录 1.链式结构的创建 2.遍历的方式 3.结点数的计算 4.高度的计算 5.第k层的节点个数 6.查找值 7.判断完全二叉树 8,销毁 9.OJ题 1.链式结构 在学习二叉树基本操作前&#xff0c;需要先创建一颗二叉树。为了快速上手&#xff0c;这里手动擦窗机简单的二叉树。等后面再自动创…

服装行业ERP系统解决方案

我国的服装企业大多属于劳动密集型&#xff0c;主要有三种类型&#xff1a;自有品牌服装生产销售企业、接订单生产型企业及处于产业链下游的零售分销企业。在经营过程中&#xff0c;服装行业面临诸多挑战&#xff0c;如流行周期短、季节性强&#xff0c;市场变化快&#xff1b;…

【HarmonyOS 4.0 应用开发实战】TypeScript入门之元组详讲

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

小程序软件测试应该怎么做?有什么作用?

近年来&#xff0c;随着移动互联网的快速发展&#xff0c;小程序软件的使用越来越广泛。无论是企业推广还是个人创作&#xff0c;小程序软件都具备了很大的潜力和市场空间。然而&#xff0c;在发布之前&#xff0c;进行充分的测试是至关重要的&#xff0c;以确保用户体验的顺畅…

【算法】Partitioning the Array(数论)

题目 Allen has an array a1,a2,…,an. For every positive integer k that is a divisor of n, Allen does the following: He partitions the array into n/k disjoint subarrays of length k. In other words, he partitions the array into the following subarrays: [a1,…

非接触式激光测厚仪 单点/三点/多点在线测厚设备

关键字: 非接触式激光测厚仪, 板材厚度检测,激光测厚仪,单点测厚仪,三点测厚仪,多点测厚仪,扫描式激光测厚仪, 厚度是各类板材品质必检的尺寸之一 在实际测量中&#xff0c;板材厚度的测量&#xff0c;尤其是宽板中间位置的厚度尺寸测量&#xff0c;是一项较为困难的工作。为此…

【笔记】CSDN文本编辑操作(持续更新中......)

文章目录 1、修改字体颜色和字号2、首行悬进两个字符3、图片居中4、字体、文字颜色、居中5、高亮6、重点标注7、加粗 1、修改字体颜色和字号 <html><head><meta http-equiv"Content" content"text/html;charsetutf-8" /><title>修…

C++大学教程(第九版)7.30 打印array对象 7.31 逆序打印字符串(递归练习题)

文章目录 题目代码运行截图题目代码运行截图 题目 (打印array对象)编写一个递归函数printArray它以一个array对象一个开始下标和一个结束下标作为实参&#xff0c;不返回任何值并打印这个array对象。当开始下标和结束下标相等时&#xff0c;这个函数应该停止处理并返回。 代码…

占预算仅20%,却是影响算力性能的关键

作者&#xff1a;林小引 戴尔科技解决方案架构师 ChatGPT迅速火爆全球后&#xff0c;人工智能进入了“暴力美学”时代。所谓暴力美学就是我们把模型的架构做到了超大规模&#xff0c;把算力的需求做到超大规模&#xff0c;训练的数据做到超大规模。 如果说算力是人工智能发展的…

STL标准模版在VS2019中的使用方法

STL标准模版在VS2019中的使用方法 1.STL在VS2019中的位置 1.STL在VS2019中的位置 1.1找到程序安装位置&#xff1a; D:\visual_studio\IDE\VC\Tools\MSVC\14.29.30133\include

重发布

一&#xff1a;作用 在两种路由协议之间&#xff0c;或者一个协议的不同进程之间&#xff0c;借助ASBR &#xff08;同时工作在两种协议或 者协 议的不同进程中&#xff09;学习到两个网络的路由信息&#xff0c;并且通过重发布进行路由共享&#xff0c;最终实现全网可 达。…

车载电子电器架构 —— IP地址获取策略

车载电子电器架构 —— IP地址获取策略 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自…

[网络安全 渗透实验 01]基于MSF框架渗透攻击Win7主机系统的设计与实现

基于MSF框架渗透攻击Win7主机系统的设计与实现 文章目录 基于MSF框架渗透攻击Win7主机系统的设计与实现[Warning] 写在前面1. 实验要求2. 实验环境搭建2.1 攻击机&#xff08;Linux kali&#xff09;的下载与安装2.2 靶机&#xff08;Windows 7 Enterprise with Service Pack 1…

旷视low-level系列(二):Practical Deep Raw Image Denoising on Mobile Devices

论文&#xff1a;ECCV 2020 代码&#xff1a;https://github.com/MegEngine/PMRID 文章目录 1. Motivation2. Contribution3. Methods3.1 噪声建模&参数估计3.2 k-Sigma变换3.3 移动端友好的网络结构 4. Experiments5. Comments 1. Motivation 业内周知&#xff0c;基于深…

Kotlin快速入门系列4

Kotlin的类与对象 类的定义 Kotlin使用关键字class来声明类。后面紧跟类名字&#xff1a; class LearnKotlin { //类名&#xff1a;LearnKotlin//... } Kotlin的类可以包含&#xff1a;构造函数和初始化代码块、函数、属性、内部类、对象声明。当然&#xff0c;也可以定义一…

vue实现查询搜索框下拉字典

字典表 前端页面显示 依据这个字典表实现动态查询 初始化数组 首先先在全局变量里定义一个数据存放查询出来的数据 data() {return {dicts: []};},生命周期 查询的时候是声明周期开始的时候&#xff0c;原本增删改查页面在生命周期开始的时候就查询了页面的数据获得了列表值…

IEEE| IceNet《IceNet for Interactive Contrast Enhancement》论文超详细解读(翻译+精读)

学习资料&#xff1a; 论文题目&#xff1a;《IceNet for Interactive Contrast Enhancement》&#xff08;用于交互式对比度增强的IceNet&#xff09;原文地址&#xff1a;export.arxiv.org/pdf/2109.05838v2.pdf 目录 ABSTRACT—摘要 翻译 精读 I. INTRODUCTION—简介 翻…

Thinkphp5.0.23远程代码执行漏洞复现

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将信息做其他用途&#xff0c;由Ta承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 1、漏洞介绍 使用Thinkphp5.x远程代码执行漏洞&#xf…

26元/月起!腾讯云自动搭建4核16G雾锁王国服务器

腾讯云无需任何配置自动搭建雾锁王国4-8人联机服务器&#xff0c;游戏24小时在线&#xff0c;4核16G服务器低至26元/月起&#xff0c;一键搭建自己的雾锁王国联机服务器&#xff01; 第一步&#xff1a;购买服务器 1、通过【腾讯云游戏服专属优惠】页面&#xff0c;选择“雾锁…