1 / 22

第 10 章 结构体及用户定义类型

第 10 章 结构体及用户定义类型. 合肥师范学院计算机科学与技术系. 主要知识点. 10.1 自定义类型标识符 10.2 结构体的定义与引用 10.3 链表. 例如 : typedef int INTEGER ; typedef float REAL;. 又如 : typedef int ARRAY[100]; ARRAY a, b, c;. 所以有 : int i; float x;. 等价与. 等价于. int a[100],b[100],c[100];. INTEGER i ; REAL x;.

Download Presentation

第 10 章 结构体及用户定义类型

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第10章 结构体及用户定义类型 合肥师范学院计算机科学与技术系

  2. 主要知识点 10.1 自定义类型标识符 10.2 结构体的定义与引用 10.3 链表

  3. 例如: typedef int INTEGER; typedef float REAL; 又如: typedef int ARRAY[100]; ARRAY a, b, c; 所以有: int i; float x; 等价与 等价于 int a[100],b[100],c[100]; INTEGER i ; REAL x; §10.1 自定义类型标识符 一般格式: typedef 原类型名 新类型名

  4. 定义一个新类型的步骤: 1、先按定义变量的方法写出定义语句; 如: int a[10]; 2、将变量名用新类型名替换; 如: int ARRAY[10]; 3、在最前面加typedef; 如: typedefint ARRAY[10]; 4、然后可以用新类型名定义变量。 如: ARRAYa,b,c;

  5. §10.2 结构体的定义与引用 • 数组可以表示一组类型相同的数据。 • 在实际中,通常需要通过一组不同类型的数据共同来描述某个实体。如:学生个人资料(学号、姓名、性别、年龄和学习成绩)。 • C 语言提供的结构体就是这样一种数据类型,它由一组称为成员(域或元素)的数据成分组成,其中每个成员可以具有不同的类型,用来存放类型不同但又相互有关的数据。 • 结构体类型:是一种C语言没有定义、用户可以根据实际需要自己定义的构造型数据类型。

  6. 10.2.1 结构体类型的定义 结构体数据类型说明的一般格式: struct 结构体类型标识符 { 类型名1 结构成员名表1; 类型名2 结构成员名表2; …… 类型名n 结构成员名表n; }; 如:描述学生基本信息 struct student { int num; char name[20]; char sex; int age; float score; } 如:表示日期 struct date { int month, day, year ;}

  7. struct student { int num; char name[10]; char sex; int age; struct date { int year; int month; int day; }birthday; float score; } 结构体类型说明可以嵌套 如: 学生基本情况 struct student { int num; char nume[20]; char sex; int age; struct date birthday; float score; } 经上面定义之后: struct student 和int , float 等标准类型标识符一样可用来定义变量、数组、指针变量等

  8. 10.2.2 结构体类型变量、数组和指针变量的定义 方法1: 先定义结构体类型,再定义结构体变量 如: struct student { int num; char nume[20]; char sex; int age; float score; } struct student std, *pstd, pers[3]; 如: struct student { int num; char name[20]; char sex; int age; float score; } std,*pstd, pers[3]; 方法2:在定义结构体类型的 同时定义结构体变量

  9. 10.2.3 结构体类型变量、数组和指针变量的引用 如: struct student { long num; char name[20]; char sex; int age; float score; }std,pers[5],*sp=&std; • 对结构体成员的引用 • 结构体变量名. 成员名 • (*指针变量名).成员名 • 指针变量名->成员名 std.num=10101; 等价于 sp->num=10101; std.sex=’M’; 等价于 (*sp).sex=’M’; std.score=75+8; 等价于 (*sp).score=75+8; std.age++; 等价于 sp->age++;

  10. 【例10.1】 结构体类型变量的引用示例。

  11. 【例10.2】 某学习小组有N名同学,已知每个同学的学号和《C语言》课程的成绩,打印最高分同学的所有信息和小组的平均成绩。

  12. 【例10.3】指向结构体变量的指针变量的应用。【例10.3】指向结构体变量的指针变量的应用。

  13. a1 an … head ^ §10.3 用指针处理链表 1.链表概述 链表作为一种常用的、能够实现动态存储分配的数据结构,在《数据结构》课程中有详细介绍。下面从应用角度,对链表作一简单介绍。下图所示为单链表结构模型。 (1)头指针变量head──指向链表的首结点。 (2)每个结点由2个域组成: 数据域──存储结点本身的信息。 指针域──指向后继结点的指针。 (3)尾结点的指针域置为NULL(空),作为链表结束的标志

  14. a1 a2 an … head ^ C语言对链表结点的结构描述在C语言中,用结构类型来描述结点结构。例如: struct slist { int data; /*数据域*/ struct slist *next; /*指针域*/ }; typedef struct slist SLIST; 用于动态分配空间的标准函数 malloc(size);在内存的动态区申请一个长度为size的存储单元 calloc(n,size);在内存的动态区申请n个长度为size的存储单元 free(*ptr);释放由ptr指向的存储单元

  15. 2. 链表的建立 例10.4 编写一个creat( )函数用于建立一个有5名学生基本数据的单向链表。 其算法步骤为: (1) 定义一个描述学生基本数据的结构体类型。 (2) 定义三个指向结构体的指针p,q和head。其中head为头指针;p为当前结点的指针;q为当前链表的表尾结点指针。 (3) 建立第一个结点 (4) 建立其它节点并完成与当前链表的链接。 重复步骤(4)就可以完成链表的建立。

  16. 例10.5 编写输出链表的函数print( ) 通过单链表的头指针,首先找到链表的第一个结点;然后顺着结点的指针域将搜索到的每个节点的数据域的值输出 3. 链表的输出

  17. 4. 链表的删除 例10.6 编写函数delete( )实现链表的删除操作 基本思路: 通过单链表的头指针,首先找到链表的第一个结点;然后顺着结点的指针域找到学号为num的结点,修改其前一个节点的指针域的值,使他指向他的下一个结点。

  18. 5. 链表的插入 例10.7 编写插入结点的函数insert( ),实现在有序链表中结点的插入操作(假设链表按照num(学号)从小到大顺序排列)。 基本思路: 通过单链表的头指针,首先找到链表的第一个结点;然后顺着结点的指针域找到值为x的节点,然后将新结点y插入。

  19. 例10.12 编写主函数调用以上各函数

More Related