第7章结构体与共用体
C程序设计(第四版)第7章结构体与共用体
7.1.1
结构体类型的定义
结构体在说明和使用之前,必须先由用 户自己定义。结构体定义的一般形式如下: struct 结构体名 { 成员类型说明符 成员项1; 成员类型说明符 成员项2; …… 成员类型说明符 成员项n; };
其中: 1、struct是C语言中定义结构体的关键字。 2、成员类型说明符是说明每个成员项的数 据类型,可以是基本数据类型,也可以是数组 类型,还可以是另一个已定义的结构体类型。 3、成员名可以和程序中的变量名相同,两 者不代表同一对象。 4、要注意,在结构体定义中的右括号后应 该有分号。
7.1.6
指向结构体的指针
一个结构体类型的数据在内存中都占据一定 的存储空间,我们可以定义一个指针来指向该 结构体类型的数据,该指针变量称为指向结构 体的指针,简称之为结构体指针。我们可以通 过结构体指针来访问结构体类型的数据,如结 构体变量、结构体数组。指向结构体的指针变 量说明形式如下: struct 结构体类型名 *结构体指针变量名;
main() { struct student stu1; struct student *p; p=&stu1; stu1.num=50201001; gets(); stu1.score=89.5;
printf(“No:%ld\nName:%s\nScore:%4.1f\n”,stu1 .num,,stu1.score); printf(“No:%ld\nName:%s\nScore:%4.1f\n”,(*p). num,(*p).name,(*p).score);
3、结构体数组应用举例 【例7-2】现有三个候选人(每个候选人的ID 号分别是1、2、3),选举人投票进行选举, 编写程序统计出每个候选人的得票结果。 程序如下: #define NUM 30 #include <stdio.h> struct elector { int id; char name[20]; int count;
《C语言程序设计教程》第三版课后习题参考答案
《C语言程序设计教程》第三版课后习题参考答案C语言程序设计教程第三版课后习题参考答案第一章:C语言概述1.1 C语言的特点答案:C语言是一种通用的、面向过程的程序设计语言,具有高效、简洁、灵活等特点。
它提供了丰富的程序设计元素和功能,适用于各种不同的应用领域。
1.2 C语言程序的基本结构答案:C语言程序由预处理指令、函数声明、函数定义、变量声明和语句组成。
其中,预处理指令用来引入头文件或定义宏,函数声明用来声明函数的名称和参数,函数定义用来实现函数的功能,变量声明用来声明变量的类型和名称,语句用来表达具体的计算过程。
1.3 C语言的数据类型答案:C语言提供了多种数据类型,包括基本类型(整型、浮点型、字符型等)和派生类型(数组、指针、结构体等)。
每种数据类型在内存中占据一定的存储空间,并具有特定的取值范围和操作规则。
1.4 C语言的运算符和表达式答案:C语言支持各种运算符和表达式,例如算术运算符(+、-、*、/等)、关系运算符(>、<、==等)、逻辑运算符(&&、||、!等)等。
通过运算符和表达式可以进行各种数值计算和逻辑判断。
第二章:基本数据类型与运算2.1 整型数据类型答案:C语言提供了不同长度的整型数据类型,包括有符号整型(int、long等)和无符号整型(unsigned int、unsigned long等)。
整型数据类型可以表示整数值,并具有不同的取值范围。
2.2 浮点型数据类型答案:C语言提供了浮点型数据类型(float、double等),用来表示带小数部分的实数值。
浮点型数据可以表示较大或较小的数值,并具有一定的精度。
2.3 字符型数据类型答案:C语言提供了字符型数据类型(char),用来表示单个字符。
字符型数据可以用于表示各种字符(包括字母、数字、符号等)。
2.4 布尔型数据类型答案:C语言不直接支持布尔型数据类型,但可以使用整型数据类型来表示布尔值(0表示假、非零表示真)。
结构体与共用体zlh
结构体中每个成员可以是不同的 数据类型,而共用体中所有成员 必须是相同的数据类型。
结构体与共用体的区别与联系
• 使用方式:结构体中每个成员都可以单独访问和操作,而 共用体中一次只能使用其中一个成员。
结构体与共用体的区别与联系
自定义类型
结构体和共用体都是用户自定义的数据类型 ,可以根据需要组合不同的数据类型。
对于大型结构体和共用体,可以使用指针成 员来减少直接内存占用。
在跨平台编程时,要注意不同平台下的内存 对齐规则可能不同,需要进行相应的调整。
05
结构体与共用体的应用案例
案例一:使用结构体实现学生信息管理
定义学生结构体
包含学生姓名、学号、性别、年龄等字段。
创建学生信息数组
根据学生数量,创建相应大小的学生信息数组。
访问速度较慢
访问结构体的成员变量时,需要通过 指针或引用等方式进行间接访问,相 对于直接访问基本数据类型,速度较 慢。
结构体与共用体的优缺点分析
内存占用小
共用体中的所有成员变量共享同一块内存空间,因此相对于 结构体,共用体的内存占用较小。
访问速度快
访问共用体的成员变量时,可以直接通过内存地址进行访问 ,速度较快。
封装性好
结构体可以将多个变量封装在一起,形成一个自定义的数据类型,方便数据的 处理和管理。
结构体与共用体的优缺点分析
• 可扩展性强:结构体可以方便地添加或删除成员 变量,以适应不同的应用场景和需求。
结构体与共用体的优缺点分析
内存占用较大
由于结构体中每个成员变量都占用独 立的内存空间,因此相对于基本数据 类型,结构体的内存占用较大。
赋值给共用体变量
可以给共用体的任何一个成员赋值,如`data.f = 3.14;`,表示将 `data`的`f`成员赋值为3.14。
C语言学习入门笔记之结构体与共用体
结构体与共用体笔记定义结构体C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体(structre)。
在其他一些高级语言中称为“记录”.定义后的结构体类型和系统提供的标准类型(如int, char, float, double 等)具有相似的作用,都可以用来定义变量,只不过int等类型是系统已声明的,而结构体类型是由用户根据需要在程序中指定的。
定义一个结构体类型的一般形式为:struct 结构体名{ 成员表列};注意:1.结构体类型的名字是由一个关键字struct和结构体名组合而成的(例如struct Student) ,结构体名是由用户指定的,又称“结构体标记”,以区别于其他结构体类型。
上面的结构体声明中Student就是结构体名(结构体标记)。
2.花括号内是该结构体所包括的子项,称为结构体的成员。
“成员表列"(member list)也称为“域表”(field list),成员表列由若干个成员组成,每一个成员是结构体中的一个域。
对每个成员也必须作类型说明,其形式为:类型说明符成员名;成员名的命名应符合标识符的书写规定。
例如:struct stu{int num;char name[20];char sex;float score;};3.一个结构体的成员可以属于另一个结构体类型(嵌套)。
例如:struct Date //声明一个结构体类型struct Date{ int month;//月int day;//日int year;//年}struct Student//声明一个结构体类型struct Student{ int num;char name[20];char sex;int age;struct Date birthday;//成员birthday属于struct Date 类型char addr[30];};结构体类型变量1.定义结构体类型变量说明结构变量有以下三种方法。
C语言程序设计——结构体和共用体(完整版)
printf(“name\tage\tjob\tclass/office\n”); for(i=0;i<PN;i++) {if(body[i].job==„s‟) printf(“%s\t%d\t%3c\t%d\n”,body[i].name, body[i].age,body[i].job,body[i].units.class); else printf(“%s\t%d\t%3c\t%s\n”,body[i].name, body[i].age,body[i].job,body[i].units.office); } }
birthday num name sex age month day year addr
§12.3结构体数组
结构体数组的每一个元素都是具有相同结构类型 的结构体变量。 例:struct student {int num; char name[20]; float score; }stu[3]; 其中,定义了一个结构体数组stu,共有3个元素, 每个元素都具有struct student的结构形式。
§12.6共用体
共用体(也称为联合)也是一种构造的数据类型。 共用体是将不同类型的数据组织在一起共同占用 同一段内存的一种构造数据类型。 例如,在校学生和教师都填写以下表格: 姓名 年龄 职业 单位 其中,职业分两类:教师和学生; 而单位一栏里,学生填写班级编号(整型类型), 教师填写某系某教研室(整型类型) 。
§12.7枚举数据类型
当某些变量仅由有限个数据值组成时,通常用枚 举类型来表示。 所谓枚举是指将变量的值一一列举出来,变量的 值只限于列举出来的值的范围内。如一周只有7天, 一年只有12个月等等。
注意:枚举类型是一种基本数据类型,而不是一 种构造类型。关键字为enum。
C++程序设计教程-第7章结构体与共用体
C++程序设计
湖南大学
杜四春、银红霞
在定义了结构体变量后,就可以用不同的赋值方 法对结构体变量的每个成员赋值。例如:
strcpy(,”Zhang San”);
worker1.age=26;
strcpy(worker1.phone,”1234567”);
worker1.sex=’m’;
char addr[20];
}stu[3];
C++程序设计
湖南大学
杜四春、银红霞
3. 直接定义结构体数组
结构体数组的定义形式如下:
struct
//没有结构体名
{ 成员表列; }数组名[元素个数];
例如: struct {
char name[20];
char sex;
int age;
char addr[20];
C++程序设计
湖南大学
杜四春、银红霞
1. 先定义结构体类型,再用它定义结构体数组。
结构体数组的定义形式如下:
struct 结构体名 {
例如: struct student
成员表列;
{
}; struct 结构体名
char name[20]; char sex; int age;
char addr[20];
结构体数组初始化的一般形式是:
struct 结构体名
{ 成员表列;
}; struct 结构体名 数组名[元素个数]={初始数据表};
C++程序设计
湖南大学
杜四春、银红霞
或者:
struct 结构体名
{
成员表列;
}数组名[元素个数]={初始数据表}; 在对结构体数组进行初始化时,方括号[ ]中元素
结构体与共用体小结
结构体与共用体小结结构体和共用体是C语言中非常重要的数据类型。
它们在存储和组织数据方面提供了更灵活的选择。
本文将从定义、声明、初始化、使用和比较等方面对结构体和共用体进行详细讨论。
一、结构体(Struct)结构体是一种能够存储不同类型数据的自定义数据类型。
它允许将不同类型的数据组合在一起,形成一个逻辑上的实体。
1.定义和声明结构体的定义使用关键字`struct`,可以像定义其他变量一样定义结构体。
例如:```cstruct Studentint id;char name[20];int age;};```在定义结构体后,可以使用该结构体类型声明变量。
例如:```cstruct Student stu1;```也可以一步完成结构体类型定义和变量声明。
例如:```cstruct Studentint id;char name[20];int age;} stu1;```2.初始化结构体变量可以使用初始化列表初始化。
例如:```cstruct Student stu1 = {1001, "John", 20};```3.使用结构体变量的成员可以通过`.`运算符访问。
例如:```cstu1.id = 1001;strcpy(, "John");stu1.age = 20;```4.比较结构体不能直接比较,但可以通过定义比较函数来比较。
例如:```creturn (stu1.id == stu2.id && strcmp(, ) == 0 && stu1.age == stu2.age);```二、共用体(Union)共用体是一种特殊的数据类型,它允许不同类型的成员共享同一块内存空间。
共用体的成员在内存中是相互重叠的,只有一个成员可以被赋值和使用。
1.定义和声明共用体的定义使用关键字`union`,可以像定义其他变量一样定义共用体。
例如:```cunion Dataint i;float f;char str[20];};```在定义共用体后,可以使用该共用体类型声明变量。
c语言程序设计教程第二版课后习题答案
c语言程序设计教程第二版课后习题答案第一章:C语言基础1. 以下为C语言的特点:- C语言是一种结构化编程语言,可以通过模块化的方式构建复杂的程序。
- C语言具有较高的可移植性,可以在不同的操作系统和硬件平台上运行。
- C语言提供了丰富的库函数,方便开发者进行程序开发。
- C语言对指针的支持较好,可以进行底层的内存操作。
2. C语言中的标识符规则:- 标识符由字母、数字和下划线组成,且第一个字符不能是数字。
- 标识符区分大小写,因此变量名"num"和"Num"是不同的。
- 标识符不能与关键字重名,如"if"、 "for"等。
- 标识符长度一般不超过32个字符。
3. 在C语言中,预处理指令的作用是在程序编译之前对代码进行处理,包括宏展开、文件包含等。
预处理指令以"#"开头,常见的预处理指令有:- #include:用于包含头文件,将头文件中的内容插入到当前文件中。
- #define:用于定义宏,将宏名称替换为指定的值或代码片段。
- #ifdef、#ifndef、#endif:用于条件编译,根据条件是否成立来选择性地编译代码。
4. C语言中的数据类型分为基本数据类型和派生数据类型两种。
基本数据类型包括整型、浮点型、字符型和布尔型,派生数据类型包括数组、指针、结构体和共用体。
5. C语言中的运算符主要分为算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符等。
算术运算符用于执行加减乘除等基本算术操作,关系运算符用于比较两个值的大小关系,逻辑运算符用于组合多个条件的判断结果,位运算符用于对二进制位进行操作,赋值运算符用于将右侧的值赋给左侧的变量。
第二章:C语言程序结构1. C语言程序结构由函数、语句和注释组成。
每个C语言程序至少包含一个main()函数,作为程序的入口。
2. 以下为C语言程序的基本结构:```c#include <stdio.h>int main() {// 程序代码return 0;}```3. C语言中的控制语句包括条件语句和循环语句。
C语言第七章选择题
C 语言选择) 8 713.设有如下定义: struct st {int a; float b;} st1, *pst; 若有 pst=&st1;,则对 st1 中的 a 域的正确引用是 A) (*pst).st1.a B) (*pst).a C) pst->st1.a D) pst.st1.a 714.若有以下定义: struct stru {int a; long b; char c[6];} sampl; 则以下赋值正确的是 A) sampl.c= "abcd"; B) strcpy(sampl.c, "abcd"); C) sampl->c= "abcd"; D) 以上均不正确 715.以下程序的输出结果是 main() {struct stru{int a; long b; char c[6]; }; printf("%d\n", sizeof(struct stru)); } A) 2 B) 4 C) 6 D) 12 716.以下程序的输出结果是 main() {struct cmplx{int x; int y;} cnum[2]={1,3,2,7}; printf("%d\n", cnum[0].y/cnum[0].x*cnum[1].x); }
C 语言选择题库
汕头大学许创编辑
结点插入到链表末尾的语句组是 data next data next ┌──┬───┐ ┌──┬───┐ head│ E │ +→│ F │ NULL│ └──┴───┘ └──┴───┘ ↑p A) s->next=NULL; p=p->next; p->next=s; B) p=p->next; s->next=p->next; p->next=s; C) p=p->next; s->next=p; p->next=s; D) p=(*p).next; (*s).next=(*p).next; (*p).next=s; 723.以下程序的输出结果是 #include int a[3][3]={1, 2, 3, 4, 5, 6, 7, 8, 9}, *p; main( ) {p=(int*)malloc(sizeof(int)); f(p, a); printf("%d\n", *p); } f(int *s, int p[ ][3]) {*s=p[1][1];} A) 1 B) 4 C) 7 D) 5
结构体与共用体
2020/12/16
15
8.1 结构体
8.1.2 结构体数组
定义结构体数组的方法和结构体变量相似:
(1) struct 结构体名 {成员表列} 数组名[数组长度];
(2) 先声明一个结构体类型,然后再用此类型定义结构体数组: 结构体类型 数组名[数组长度];
例8.3 编写程序,利用结构体数组存储和显示三个学生的信息。 算法描述:首先定义并初始化一个结构体数组,然后通过printf 函数输出到屏幕上即可。
return 0;
}
2020/12/16
17
8.1 结构体
程序分析: 程序中定义了一个外部结构体数组stu,共3个元 素,并作了初始化赋值。在main函数中用for语句 逐个输出各元素的各个成员值。
2020/12/16
18
8.1 结构体
8.1.3 结构体指针
指向结构体变量的指针
例8.4 使用指向结构体变量的指针来访问结构体变量的 各个成员。
struct student
{ int num;
char name[10];
float score; };
int main ()
{struct student stu[3]={{1, "Wang", 90.0}, {2, "Qian", 89.5}, {3, "Sun", 85.0}};
struct student *p; int i;
注意 : (1)在定义结构体变量时可以对它的成员初始化。初始化列表是用花括号 括起来的一些常量。如:
struct Student a={10001,"Li Ming",'M',"Bei Jing"};
共用体和结构体的区别
其中,struct 是结构体关键字,一定不能省略。 node 是结构体名,可以省略,成为无名结构体。 结构体成员可以使基本类型或者构造类型。 3、特点 变量用.访问,指针用 ->访问。eg. node.num = 1; node->ame = abc; 共用体 1、共用体的作用 用覆盖技术,几个变量相互覆盖,从而使几个不同变量共占一段内存 的结构。共用体的所有成员都在一段内存中存放,起始地址一样,并且同一 时刻只能使用其中的一个成员变量。
2、结构体总空间大小,等于各成员总长度,共用体空间等于最大成 员占据的空间。 3、共用体不能赋初值而结构体可以。
2、共用体的定义 共用体如下所示, 其中 union 是共用体关键字,不能省略。node 是共用体名。 3、特点 用体内存长度是内部最长的数据类型的长度。 共用体的地址和内部各成员变量的地址都是同一个地址 主要区别 1、结构体每一位成员都用来表示一种具体事务的属性,共用体成员 可以表示多种属性(同一存储空间可以存储不同类型的数据) 。
共用体和结构体的区别
在 c++中,结构体(struct)和共用体(union)是两种很相似的复合 数据类型,都可以用来存储多种数据类型,但是两者还有很大的区别。 结构体 1、结构体的作用 在网络协议、通信控制、嵌入式系统的 C/C++编程中,我们经常要传 送的不是简单的字节流,而是多种数据组合起来的一个整体,其表现形式就 是一个结构体。 2、结构体的定义 结构体:是指定义相应的数据结构及相应的变量。 结构体如下所示,
第七章 结构体与共用体
定义结构体数组
定义结构体数组 数组各元素在内存中连续 存放,如图所示:
结构体数组的初始化
与其他类型的数组一样,对结构体数组可以初始化。如: struct student { int num; char name[20]; char sex; int age; float score; char add[30]; }; struct student stu[3]={{10101,“Li Lin”,‘M‟,18,87.5, “103 Beijing Road”},{10102,“Zhang Fun”,‘M‟,19,99, “130 Shanghai Road”},{10104,“Wang Min”,‘F‟,20, 78.5,“1010 Zhongshan Road”}};
但不能用以下语句整体读入结构体变量,如: scanf(“%d,%s,%c,%d,%f,%s”, &student1);
(四)结构体变量的初始化
和其他类型变量一样,对结构体变量可以在定义时指定初始值。 例11.1 对结构体变量初始化
struct student { long int num; char name[20]; char sex; char addr[20]; } main() { struct student a = {89031, "Li Lin“, 'M„, "123 Beijing Road"}; printf("NO.:%ld\nname:%s\nsex:%c\naddress:%s\n“,a.num,, a.sex,a.addr); }
方法二:在声明类型的同时定义变量
这种形式的定义的一般形式为:
struct 结构体名 { 成员表列 }变量名表列;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2. void free(void *p);
• 函数free释放由指针变量p所指示的内存 区域。
例如:free(p); 通过函数free将已分配的内存区域交还系 统,使系统可以重新对其进行分配。
• 在引用中应遵循以下原则: • (1)如果成员本身又是一个结构体类型时, 则必须逐级找到最低一级的成员才能使用。 • (2)对成员变量的使用与普通变量完全相同, 可根据其类型进行相应的运算。 • (3)可以引用成员的地址,也可以引用结构 体变量的地址。 • (4)允许将一个结构变量直接赋值给另一个 具有相同结构的结构变量。
动态分配存储空间库函数
1.void *malloc(unsigned int size);
malloc在内存的动态存储区中分配一个size长度的连 续存储空间。
返回值:返回一个指向分配域地址的指针(类型为 void);若未成功,则返回空指针(NULL)
例如:
int *p; p=(int *)malloc(8);
结构体变量的初始化
• 对于已定义的结构体类型student • struct student stu={“zhangsan”,89,97};
7.1.2 结构成员的引用
• 对结构变量的访问是通过对结构变量各个 成员的访问来进行的,结构变量成员描述 为:<结构变量名>.<成员名>
• struct student stu; • //输入 • gets(); • scanf(“%d”,&stu.english); • scanf (“%d”,&stu.math); //输出 puts(); • printf(“%d”,stu.english); • printf(“%d”,stu.math);
试一试
1.用结构体变量作为参数,编写函数 void output (struct student s) 完成数据输出。 2.用结构体变量作为参数,编写函数 double average(struct student s) 求该学生的平均分。主函数中输入两个学生 的成绩,按平均分从高到低的顺序输出他 们的信息。
小结
定义结构体数组处理5个同学的成绩问题
1.定义一个结构体类型student。 2.定义一个student类型的数组,stu[5]。 3.使用循环语句输入5个学生的数据。 4.计算每个学生的平均成绩。 5.输出结果。
以结构体数组作函数参数,将前面 程序的内容分到三个函数中实现
• 输入函数 void instu(struct student s[],int n) • 求平均值函数 void avestu(struct student s[],int n) • 输出函数 void outstu(struct student s[],int n)
8.3.2 链表
1 概述
链表存储结构是一种动态数据结构,其特 点是它包含的数据对象的个数及其相互关 系可以按需要改变,存储空间是程序根据 需要在程序运行过程中向系统申请获得, 链表也不要求逻辑上相邻的元素在物理位 置上也相邻,它没有顺序存储结构所具有 的弱点。
1.链表结构
Head
7 Qian
13 Sun
插入前,ki-1是ki的前驱,ki是ki-1的后继;
插入后,新插入的结点k’成为ki-1的后继、ki的 前驱。
链表的删除操作
(4) 删除操作:删除结点ki,使链表的长度减 1,且ki-1、ki和ki+1结点之间的逻辑关系 发生如下变化:
删除前,ki是ki+1的前驱、ki-1的后继; 删除后,ki-1成为ki+1的前驱,ki+1成为ki-1的 后继。
建立链表
1. 尾插法建立单链表 特点:头指针固定不变,新产生的结点总是链接到链表的尾部。 操作步骤: (1)设head为链表头,last为链表尾结点,head=last=NULL; (2)生成新结点,由p指针指示,并将新结点的地址域指向空: p->next=NULL; (3)如果head为NULL,则 head=p; 否则 last->next=p; (4)last=p; (5)重复(2)~(4),继续建立新结点。
用结构体类型定义学生信息类型
• struct student • { char name[10]; • int english; • int math; • };
• “结构体”是一种构造类型,是由数目固 定,类型相同或不同的若干有序变量组 成的集合。组成结构体的每个数据都称 为结构体的“成员”,或称“分量”。
定义指向结构体变量的指针
• struct student *pstu,stu; • pstu=&stu; • //输入 • gets((*pstu).name); • scanf(“%d”,&((*pstu).english) ); • scanf (“%d”,&((*pstu).math)); //输出 puts ((*pstu).name); • printf(“%d”,(*pstu).english); • printf(“%d”,(*pstu).math);
课后任务
• 定义一个图书结构体类型,包含书名、 书价信息,定义用户函数进行数据的输 入输出。 struct book { char name[20]; double price; };
Void input ( sturct book *bk ) { scanf(“%s”,(*bk).name); scanf(“%lf”,&(*bk).price); } Void output ( sturct book bk ) { printf(“%s”,); printf(“%lf”,bk.price); }
//输入 • gets(pstu->name); • scanf(“%d”,&(pstu->english) ); • scanf (“%d”,&(pstu->math)); //输出 puts(pstu->name); • printf(“%d”,(pstu->english); • printf(“%d”,(pstu->math);
1 Li
43 Zhou
Байду номын сангаас
25 Wu
37 Wang
(1)头指针变量head──指向链表的首结点。 (2)每个结点由2个域组成:
1)数据域──存储结点本身的信息。 2)指针域──指向后继结点的指针。
(3)尾结点的指针域置为“NULL(空)”, 作为链表结束的标志
链表结构的定义
struct student {char name[10]; struct student *next; }; • next为struct student类型指针变量,指向下一个结 点。 • 结点的变量或指针变量的定义: struct student node,*head; – node可以存放一个学生结点 – 指针head可以存放学生结点的地址。
对链表的基本操作
链表的基本操作有:创建、查找、插入、删除和修改等。 (1) 创建链表:从无到有地建立起一个链表。 (2) 查找:按给定的结点索引号或检索条件,查找某 个结点。如果找到指定的结点,则称为检索成功; 否则,称为检索失败。
(3) 插入:在结点ki-1与ki之间插入一个新的结点k, 使表的长度增1,且逻辑关系发生如下变化:
【例】动态定义数组。
#include <stdio.h> 程序运行结果: void main() n=10 0 1 4 9 16 25 36 49 64 81 {int n,i,*p; printf("n="); scanf("%d",&n); p=(int *)malloc(n*sizeof(int)); for(i=0;i<n;i++) p[i]=i*i; for(i=0;i<n;i++) printf("%d ",p[i]); free(p); }
• 以结构体数组作函数参数,编写函数 void sort(struct student s[],int n) 根据平均值从大到小将学生成绩进行排序
问题与讨论
• 如果在结构体中再包含数组成员,将如 何引用?
• 如果在结构体中再包含结构体,将如何 引用?
小结
• 结构体数组的每一个数组元素,都是一个结 构体类型数据,均包含结构体类型数据的所 有成员。 • 结构体数组元素的引用需要考虑数组与成员 两方面,数组名[下标].成员。 • 结构体数组初始化类似于数组初始化,可用{} 分开各个元素。 • 结构体数组作函数参数同数组名作函数参数 一样,是地址传递方式,形参结构变量中各 成员值的改变,影响实参结构变量的值。
2. 头插法建立单链表
特点:新产生的结点作为新的链表头插入链表。 操作步骤: (1)head=NULL; (2)生成新结点,指针变量p指向该结点; (3)p->next=head; head=p; (4)重复(2)~(3),继续生成下一个链表 结点。
1.定义结构体变量前不先定义类型。 2.定义类型时大括号后不加分号。
1.结构体变量中的成员类型可以各不相同。 2.必须先定义结构体类型,再用该类型定义结 构体变量。 3.对于结构变量的使用必须通过引用成员实现, 使用.符号。 4.结构变量的初始化注意数据的顺序、类型要 与结构类型定义时相匹配,可以对部分数据 初始化。 5.结构体变量作函数参数时同简单变量作函数 参数时一样,是单向“值传递”方式,形参 数据改变不影响实参。
试一试
1.用结构体变量作为参数,编写函数 void input (struct *student s) 完成从键盘输入数据的功能。