C语言第11章结构类型及其他构造类型.ppt_第1页
C语言第11章结构类型及其他构造类型.ppt_第2页
C语言第11章结构类型及其他构造类型.ppt_第3页
C语言第11章结构类型及其他构造类型.ppt_第4页
C语言第11章结构类型及其他构造类型.ppt_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十一章 结构类型及其他构造类型 本章学习内容 本章首先介绍了结构体类型和结构 体类型变量和结构体类型数组的定义与 使用方法。然后,介绍了指向结构体类 型数据的指针的使用方法。最后,介绍 了静态链表和动态链表。并通过设计一 个学生信息管理系统具体介绍了对动态 链表进行新建、插入结点、删除结点、 添加结点以及查询等操作的程序设计。 本章学习目的 使学生学会声明结构体类型和定 义结构体类型变量与结构体数组变量 的方法,掌握指向结构体类型数据的 指针的使用方法。掌握动态链表的基 本概念,并能设计程序对动态链表进 行新建、插入结点、删除结点、添加 结点以及查询等操作。 本章学习重点和难点 重点和难点: 1结构体数组的程序设计。 2动态链表的程序设计。 第十一章 结构类型及其他构造类型 11.1 结构类型 11.2 定义结构体类型变量的方法 11.3 结构体变量的引用 11.4 结构体变量的初始化 11.5 指针数组 11.1 结构类型 声明一个结构体类型的一般形式: struct 结构体名 成员列表; 其中,结构体名用做结构体类型的标志 。 成员类型声明的一般形式: 类型名 成员名; 11.1 结构类型 则一般形式为: struct 结构体名 类型名 成员名1; 类型名 成员名2; 类型名 成员名n; ; 11.1 结构类型 例如: struct student int num; char name20; char sex; int age; float score; char addr30; ; 11.2 定义结构体类型变量的方 法 1先声明结构体类型再定义变量名 11.2 定义结构体类型变量的方 法 一般形式: 结构体类型 变量列表; 11.2 定义结构体类型变量的方 法 2在声明结构体类型的同时定义变量 struct 结构体名 成员列表变量列表; 11.2 定义结构体类型变量的方 法 3直接定义结构体类型变量 一般形式: struct 成员列表 变量列表; 11.2 定义结构体类型变量的方 法 说明: (1)类型与变量是不同的2个概念。只能对变量赋值 、存取或运算,而不能对一个类型赋值、存取或运 算。在编译时,对类型是不分配空间的,只对变量 分配空间。 (2)对结构体中的成员(即“域”或称为“字段”),可 以单独使用,它的作用与地位相当于简单变量。 (3)成员也可以是一个结构体变量。 (4)成员名可以与程序中的变量名相同,二者不代表 同一对象。例如程序中可以另定义一个变量num, 它与struct student中的sum是两回事,互不干扰。 11.3 结构体变量的引用 定义了结构体变量后,就可以引用这个 变量,但应遵循以下规则: (1)不能将一个结构体变量作为一个整体进 行输入和输出。只能对结构体变量中的各个 成员分别进行输入和输出。 11.3 结构体变量的引用 (2)如果成员本身又属于一个结构体类型, 则要用若干个成员运算符,一级一级地找到 最低一级的成员。只能对最低一级的成员进 行赋值、存取或运算。 11.3 结构体变量的引用 (3)对结构体变量的成员可以象简单变量一 样进行各种运算,即根据类型决定可以进行 的运算。 11.3 结构体变量的引用 (4)可以引用结构体变量成员的地址,也可 以引用结构体变量的地址。 11.4 结构体变量的初始化 例1 对结构体变量初始化。 11.5 结构体数组 11.5.1 定义结构体数组 11.5.2 初始化结构体数组 11.5.1 定义结构体数组 结构体数组每一个数组元素都是一 个结构体类型的数据,它们都分别包括各个 成员项。 11.5.2 初始化结构体数组 与其他类型的数组一样,对价格数组可以初始化。如: struct student int num; char name20; char sex; int age; float score; char add30; stu3=10101,“Li Lin“,M,18,87.5,“103 Beijing Road“, 10102,“Zhang Fen“,M,19,99,“130 Shanghai Road“, 10104,“Wang Min“,F,20,78.5,“1010 Zhongshan Road“; 11.6 指向结构体类型数据的指 针 11.6.1 指向结构体变量的指针 11.6.2 指向结构体类数组的指针 11.6.3 用结构体变量和指向结构体的指 针作函数的参数 11.6 指向结构体类型数据的指 针 结构体变量的指针一个指针结构体 变量的指针,就是该变量所占据的起始地址 。 11.6 指向结构体类型数据的指 针 可以设一个指针变量,用来指向一个结 构体变量,此时该指针变量的值是结构体变 量的起始地址。指针变量也可以用来指向结 构体数组中的元素。 11.6.1 指向结构体变量的指针 例1 指向结构体变量的指针应用。 11.6.1 指向结构体变量的指针 以下3种形式是等价的: (1)结构体变量.成员名 (2)(*p).成员名 (2)p-.成员名 其中,-称为指向运算符。 11.6.2 指向结构体类数组的指 针 例2 指向结构体类数组的指针应用。 11.6.3 用结构体变量和指向结 构体的指针作函数的参数 将一个结构体变量的值传递给另一个函数 ,有3种方法: (1)用结构体变量的成员作参数。属于“传值”。 (2)用结构体变量作实参。属于“传值”。 (3)用指向结构体变量或数组的指针作实参。属 于“传地址”。 11.6.3 用结构体变量和指向结 构体的指针作函数的参数 例3 有一个结构体变量stu,内含学生学号、 姓名和3门课程的成绩。要求在main函数中 赋值,在另一个函数print中将它们打印输出 。 11.6.3 用结构体变量和指向结 构体的指针作函数的参数 例4 使用指向结构体变量的指针作实参,完成 上例。 11.7 用指针处理链表 11.7.1 链表概述 11.7.2 简单链表 11.7.3 处理动态链表所需的函数 11.7.4 建立动态链表 11.7.5 输出链表 11.7.6 对链表的删除操作 11.7.7 对链表的插入操作 11.7.8 对链表的综合操作 11.7.1 链表概述 链表是一种常见的重要的数据结构。它 是动态地进行存储分配的一种结构。 11.7.2 简单链表 下面通过一个例子来说明如何建立和输出 一个简单链表。 例1 建立一个上图所示的简单链表,它由3个 学生数据的结点组成。输出各结点中的数据 。 11.7.2 简单链表 例中所有结点都是在程序中定义的,不 是临时开辟的单元,也不能用完后释放空间 ,这种链表称为静态链表。 11.7.3 处理动态链表所需的函 数 如何使链表结构动态的分配存储单元,在 需要时才开辟一个结点的存储单元?怎样动 态开辟和释放存储单元呢?C语言编译系统 的库函数提供了以下有关函数。 11.7.3 处理动态链表所需的函 数 1malloc函数 函数原型为: void * malloc(unsigned int size); 功能:在内存的动态存储区中分配一个长度为 size的连续空间。函数的值是一个指向分配 域起始地址的指针,类型为void。如果函数 未能成功执行,例如内存空间不足,则返回 空指针NULL。 11.7.3 处理动态链表所需的函 数 2calloc函数 函数原型为: void * calloc(unsigned n,unsingned size); 功能:在内存的动态存储区中分配n个长度为 size的连续空间。函数返回一个指向分配域 起始地址的指针,类型为void。如果分配不 成功,则返回空指针NULL。 11.7.3 处理动态链表所需的函 数 3free函数 函数原型为: void * free(void *p); 功能:释放由p执行行的内存区,使这部分内 存区能被其他变量使用。P是最近一次调用 calloc或malloc函数时返回的值。free函数无 返回值。 11.7.4 建立动态链表 所谓建立动态链表是指在程序执行过程中 从无到有地建立起一个链表,即一个一个地开辟 结点和输入各结点数据,并建立起前后相链的关 系。 11.7.5 输出链表 输出链表就是将各结点的数据依次输出。 例3 编写一个输出链表的函数print。 11.7.6 对链表的删除操作 例4 编写一个删除动态链表中指定结点的函数 。 11.7.7 对链表的插入操作 例5 编写一个插入结点的函数insert。设各个结 点是按学号成员项num的值由小

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论