第5章 结构、共用体和链表

    在实际应用中,常常需要把类型不同的一系列数据存储在一起,例如要登记一个学生的信息,则需要记录他的姓名(C-string)、学号(整型或字符型)、年龄(整型)、身高和体重(浮点型)等,前面介绍的数组无法完成这一任务,因为数组要求所有的元素属于同一类型。结构(struct)可以满足我们的要求,为了满足程序设计的需要,C++允许我们自己定义数据类型,称之为自定义数据类型,结构是自定义数据类型中的一种,其可将多种数据类型组合在一起使用。

    共用体可以看成是一种特殊的结构,与结构不同的地方在于其允许在系统内存的同一块区域保存不同类型的数据。将一个个的结构变量或共用体变量用指针联系起来,便形成了链表。正确使用结构、共用体和链表,才能写出高质量的C++程序。

    本章主要涉及以下知识点。

    ❑结构的定义与使用:介绍如何定义一个结构并进行使用。

    ❑共用体定义与使用:介绍共用体的概念和使用。

    ❑结构和共用体数组:介绍结构和共用体数组的声明和使用。

    ❑结构的指针:介绍如何声明一个结构指针及使用。

    ❑链表:讲解链表的创建及其相应的操作方法。

    5.1 结构

    结构是比数组更为灵活的一种数据结构,从字面上分析可将结构看做一组变量,它们可以具有不同的数据类型,将它们集合到一个整体中,这个整体便称之为结构。仍举存储学生信息这个例子,可以定义一个student结构,编译器将该结构看成一个整体或一个类型,与int和double同样。程序中可以声明student型的变量,该变量包含了一个学生的姓名、学号、年龄、身高和体重等一系列信息。使用结构,可以有效地实现相关信息的存储和管理。

    5.1.1 如何定义一个结构

    结构是用户定义的一种数据类型。定义了结构后,便可以通过声明创建这种类型的变量。因此,结构的使用分为两个步骤,一是结构的定义,二是结构变量的声明。

    我们可以采用如下形式定义一个student型的结构。


    struct student { char name[20]; int age; float weight; };student结构集合了某个学生姓名(字符数组)、年龄(整型)和体重(浮点型)的信息,关键字struct表明这些代码是一个结构的定义,紧跟在struct后面的student是这个结构的类型(或名称),完成该定义后,便可以像创建int型和double型变量一样创建student型的变量了,花括号内包含的是该结构所包含的信息(存储的数据类型)的列表,其中的每项都是一个声明语句,本例中使用了一个存储姓名的字符数组name,一个存储年龄的int型变量age和一个存储体重的float型变量weight。一般形式的结构定义如下所示。 struct结构名称(或称标识) { 存储数据列表;(或称成员变量列表) };

    注意

    在定义结构时,一定不要忘记花括号后的分号,因为结构的定义可以看成一条完整的C++语句,否则编译器会报错。