![算法训练营:海量图解+竞赛刷题(入门篇)](https://wfqqreader-1252317822.image.myqcloud.com/cover/621/39479621/b_39479621.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.8 信息携带者:定义一个结构体
在程序设计中,经常需要将多个数据项组合在一起作为一个数据元素。例如,一个学生的信息包括姓名、学号、性别、年龄、分数等。此时可以将学生的信息定义为结构体类型。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/039-2.jpg?sign=1739592492-En0McGvO1GgFhJAbESojysgZGZaSbIJl-0-52bb0e0fe790017d257055eef2dfc023)
训练1-35:输入一个学生的信息(包括姓名、学号、性别、年龄、分数)并输出。
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/039-3.jpg?sign=1739592492-vZI1lHjy1Ui6OIQdH6lxJt7HpRffEp3a-0-c71fe4f00f719e154e9b2c4d099372a7)
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/040-1.jpg?sign=1739592492-ZRMksgRksgMjh6WOfRpHiIxUhVWx4hHX-0-7ccc4bfef4395856f67529f1d441598a)
有时为了方便,会使用typedef给结构体起一个别名(小名):
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/040-2.jpg?sign=1739592492-WOW2Z8G77Fm9gWexfKTGs7GsiSgXnqvO-0-87b0a2277699389be27b4b8f0c4cc7b6)
使用typedef有什么用处?typedef是C、C++语言的关键字,用于给原有数据类型起一个别名。
语法规则如下:
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/040-3.jpg?sign=1739592492-nzGc9uzZHn9kO2Qz4stzfsnUKI0Wg2xb-0-dec713573de34f383893e05d14492a7e)
其中,“类型名称”为已知数据类型,包括基本数据类型(如int、float等)和用户自定义的数据类型(如用struct自定义的结构体);“类型标识符”是为原有数据类型起的别名,需要满足标识符命名规则。就像给某个人起一个小名或绰号一样,《三国演义》中李逵的绰号是“黑旋风”,大家听到“黑旋风”就知道是李逵。
使用typedef的好处如下。
(1)简化比较复杂的类型声明。给复杂的结构体类型起一个别名,这样就可以使用这个别名等价该结构体类型,在声明该类型变量时就方便多了。
(2)提高程序的可移植性。例如,在程序中使用这样的语句:
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/040-4.jpg?sign=1739592492-EfHWGhD0LIDuHfYIohl65uLKpWiIWuRz-0-d3bb8a7036629c273518191bce723545)
在程序中就可以直接定义:
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/040-5.jpg?sign=1739592492-af2GRua806P5mlk3M9ZBgAwVO5kyymtC-0-6f3d211a05820d03b98e6a69bf734934)
在程序中,假如有n个地方用到了ElemType类型,比如现在处理的数据变为字符类型了,就可以将上面类型定义中的int直接改为char:
![](https://epubservercos.yuewen.com/41CA5A/20637464308667306/epubprivate/OEBPS/Images/040-6.jpg?sign=1739592492-sRlsReRpmM0enrGKIVxFnLXG8jfSYmBG-0-eb6d1ff1c51e6c2559beca8e40ac7ef9)
这样只需修改类型定义,无须改动程序中的代码。如果不使用typedef类型定义,就需要把程序中n个用到int类型的地方,全部改为char类型。如果忘记修改某处,就会发生错误。
使用ElemType是为了让算法的通用性更好,因为很多时候结构体定义并不指定处理的数据是什么类型,不能简单地将其写成某种类型。将ElemType结合typedef使用,可以提高算法的通用性和可移植性。