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

伊吖学C笔记(8、结构体、链表、union、enum、typedef)

伊吖学C笔记(结构体)

一、结构体

如果说单个数据(比如一个int、一个char,一个double)是一维数据,那结构体就是一个二维数据,把几个相关数据当作一行记录(一个记录包含几个数据),这样更方便处理大量同属性的对象。这个记录的形式就是构造数据类型,多个记录形成了一张二维表,这也是最常见的(比如电子表格、数据库)的数据存储的基本形式。看看某班的花名册:

每个人都有5项基本属性,人数很多,我们可以如下定义。

1.定义。

关键字struct不能省,花括号外的“;”不能省。

也可以定义结构时,同时定义结构体变量,这样:

这个st1,就是结构体变量名,用来标注一行记录。

当然,也可以在结构体定义后,单独定义:

除了定义变量,同样可以定义数组、指针:

单独定义结构体指针:

对于字符串数组,可以这样定义:char *name。

可以看出结构体把不同类型的数据,定义在一起,体现了对数据管理的灵活性。

2.赋值。

定义直接赋值:

数组赋值:

数组是双花括号,中间有“,”,最后结尾有“;”。

键盘输入赋值:

结构体指针的使用:&p->no等同于&(p->no),->优先级高,意思是指针p指向成员no的地址。

3.输出。

通常用指针输出:

结构体数组的输出形式:

通过定义结构体函数的输出方式:

4.结构体嵌套。

输出:

变量的引用为分级的“树”型引用。

5.结构体按关键字排序。

二、共用体

类似结构体定义、赋值。

关键字union不可少,可声明多个成员,最后一次成员赋值被保存,有效。

最后一次赋值类型为有效类型,*name长度为4字节,而name[9]以4为倍数的长度,超过8为12字节。

数组形式不适合共用体。

三、枚举类型

一周七天,一年12个月,等等,可以确定成员数量的类型,定义为枚举:

变量只能是其中一个,长度为4字节。

发生跳跃,自动顺延。

四、类型说明符

typedef,这是组合词,type类型def定义,功能就是取个新名字简化定义。

一般用大写表示。

五、链表

1.链表定义

数据由一节一节组成,前面是数据域,存放数据,后面是指针域,存放指针,即下一节点的首地址。最后一个指针域为空NULL。每个节点使用动态内存分配malloc(),节点之间可以有距离。

也就是说,在结构体内要定义一个指针,指针要指向下一个结构体,从而形成链表形式。一个结构体的长度确定了,就是链表一节的长度。此例为12字节。

2.链表赋值

声明A、B、C三个结构体指针,分配三节内存(每节12字节),写入数据,通过指针传递实行首尾相连,最后一个指向NULL。

可以看出,12字节长度的链表,相距24字节。

3.链表打印输出

循环体内加个指针传递,实现遍历输出。

4.链表的实际变化

如果这个链表一个数据也没有,是个空链表,那就必须要有一个头节点,不含数据,只有一个指针,指向NULL。

增加了一个头节点head,只有指针没有数据,内存空间还是在的,输出了乱七八糟。这样似乎浪费了一个空间,把它利用起来,也就是头节点也记录数据。

这样,如果没有数据,只有头,head->next=NULL;如果有一个数据,数据存在头部,head->next=NULL。

也可以先声明空指针struct stu *head=NULL;然后指向第一节。

在实际操作链表时,不可能每一节都声明一个指针(象B、C),它需要动态存入数据,比如1000个节点后再增加一个节点数据,这时我们可以用函数构建一个循环体,来增加节点和数据。

主函数里如下调用:

如果是在链表前添加数据,可以这样:

5.释放链表内存

6.链表删除节点

主程序调用如下:

至此,struct、union、enum、typedef、链表,我们就有了基本了解。

7、链表应用场景

六、结构体应用例子

结构体很适合大量成组、成对数据的操作,比如学生统计表、单位员工信息表工资表、xy坐标、地理经纬度、字典键值对等。

例子:输入一段文本,现在要把里面的省份名全部替换成省份简称?

思路:首先是建立省份全称、简称结构体,象这样:

{ {"北京市", "京"}, {"天津市", "津"},....},然后到文本中查找“北京市”,找到替换,再找,直到找不到为止;再开始“天津市”...直到全部完成。关于在一段文本查找字符串,我们学过:字符串截取strncpy(a,b+索引,长度)、字符串比较strcmp(a,b)两个函数,可以在文本中从头到尾(不能跳)截串比较。还有更好的函数strstr(a,b),返回b在a中索引。

代码实现:

替换函数代码:

主调用函数代码及结果:

http://www.dtcms.com/a/434634.html

相关文章:

  • 2022 年真题配套词汇单词笔记(考研真相)
  • HTML5消费收入矩阵计算器
  • 霸州做阿里巴巴网站庆安建设局网站
  • PCB学习——STM32F103VET6-STM32主控部分
  • 大学生作业做网站网站建设公司比较
  • 写一个星河社区aistudio大模型部署之后的AI agent转发程序
  • 网站上的中英文切换是怎么做的wordpress页面移动端
  • 八、Scala 集合与函数式编程
  • 腾讯CODING Maven的aar制品添加上传流程
  • Effective Modern C++ 条款29: 移动语义的局限性与实践指南
  • 2025年渗透测试面试题总结-98(题目+回答)
  • 深圳网站制作 公司wordpress备份百度云
  • 《时序数据监控平台优化指南:从查询超时到秒级响应,指标下的存储与检索重构实践》
  • 新版android studio创建项目的一些问题
  • 做企业网站有哪些好处软件技术买什么笔记本好
  • 【Redis】Redis的5种核心数据结构和实战场景对应(在项目中的用法)
  • Vue 与 React 深度对比:技术差异、选型建议与未来趋势
  • 创意网站页面wordpress预约小程序
  • Android_framework-odex优化
  • RAG核心特性:文档过滤和检索
  • 26.awk 使用手册
  • AI应用开发新范式:从模型API到交互式网页的极速实现路径
  • 网站建设2017主流代码语言太原百度快照优化排名
  • Python学习之day02学习(函数模块的上传、数据类型+)
  • 可以下载的建站网站河南省建设厅门户网站
  • [创业之路-661]:采集狩猎社会的主要技术、技术产业链以及产要产品
  • 做图文的网站传媒公司名字大全免费
  • 网站开发和游戏开发哪个好网站怎么架设
  • HttpEntity 详解
  • win11电脑设备和打印机中的设备栏,计算机图标有黄色感叹号