第10章 结构体及共用体
第10章 结构体与共用体
第10章结构体与共用体考核知识点●结构体与共用体类型数据的定义方法和引用方法●用指针和结构体构成链表,单向链表的建立、输出、插入与删除重要考点●对结构体的声明及定义●访问结构体的成员的方法●熟悉对链表的操作10.1 用typedef说明一种新类型名C语言规定可以用typedef说明一种新的类型名,说明新类型名的语句一般形式为:typedef 类型名称标识符;其中,“类型名”一定是在此语句之前已有定义的类型标识符。
“标识符”是一个用户定义标识符,用来标识新的类型名。
typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并没有产生新的数据类型,因此,原有的类型名依然有效。
提示:声明一个新的类型名的具体步骤如下:⑴先按定义变量的方法写出定义的主体(如float a;).⑵将变量名换成新类型名(如将a换成FLO)。
⑶在最左面加上关键字typedef(如typedef FLO).⑷然后可以用新类型名去定义其他的变量(如FLO b;).10.2 结构体类型在实际工作中,当我们需要把一些不同类型,但相互之间又存在着联系的信息组合应用时,就要用到结构体。
结构体是一种看似复杂却非常灵活的构造数据类型。
在通常情况下,一个结构体类型由若干个称为成员(或称为域)的部分组成。
不同的结构体类型可根据需要由不同的成员组成。
但对于某个具体的结构体类型,其成员的数量必须固定,这一点与数组相同;但结构体中各个成员的类型可以不同,这是结构体与数组的重要区别。
例如,我们常用的“时间”可以由以下3个部分描述:小时(hour)、分(minute)、秒(second)。
它们都可以用整型数表示,可以把这3个成员组成一个整体,并给它取名为time,这就是一个简单的结构体。
声明一个结构体类型的一般形式为:struct 结构体名{成员表列};struct是C语言中的关键字,是结构体类型的标志。
“结构体名”用做结构体类型的标志,它又称“结构体标记”(structure)。
专题10 结构体和共用体的概念及应用
4)使用typedef说明一个结构体类型,再用新类型名来定义变量(常用)
typedef { struct
typedef struct ST { struct date birthday; a; long int b; float sc[4]; char c[2]; }STREC; } NEW; // STREC是一个具体的结构体类型名,可以用它来定义相应的变量,就如int、char 则下面叙述中正确的是 一样,用它来定义变量时,就不能用struct A)以上的说明形式非法 B)ST是一个结构体类型 C)NEW是一个结构体类型 D)NEW是一个结构体变量 STREC std,pers[3],*pstd;
练习
3.以下结构体类型说明和变量定义中正确的是 [08年4月份题目] A)typedef struct {int n; char c;}REC; REC t1,t2; B)struct REC; {int n; char c;}; A REC t1,t2; C)typedef struct REC ; {int n=0; char c='A';}t1,t2; D)struct {int n;char c;}REC REC t1,t2;
练习
4.有以下程序[08年9月] C #include<stdio.h> struct st {int x,y;}data[2]={1,10,2,20}; main() { struct st *p=data; printf("%d,",p->y); printf("%d\n",(++p)->x); } 程序的运行结果是 A) 10,1 B)20,1 C) 10,2 D)20,2 5.有以下程序[08年9月] main() D { struct STU { char name[9]; char sex; double score[2];}; struct STU a={"Zhao",'m',85.0,90.0},b={"Qian",'f',95.0,92.0}; b=a; //结构体变量可以直接赋值 printf("%s,%c,%2.0f,%2.0f\n", , b.sex, b.score[0], b.score[1]); } 程序的运行结果是( ) A) Qian,f,95,92 B) Qian,m,85,90 C) Zhao,f,95,92 D) Zhao,m,85,90
结构体与共用体
10. 1 结构体数据
• 【注意】 • (1) 不能将一个结构体变量作为一个整体进行赋值和输出; 只能对其各
个成员分别输出。 • ( 2) 对成员变量可以像普通变量一样进行各种运算。例如: • sumage = stu1. age + stu2. age; • (3) 既可以引用成员的地址, 也可以引用结构体变量的地址。例如: • printf("score = %f",stu2. score); • (4) 若成员本身还属于一个结构体类型, 则只能对最低级的成员进行赋
给出结构变量。 • 三种方法中声明的stu1、stu2 变量都具有图10. 1 所示的结构。
上一页 下一页 返回
10. 1 结构体数据
• 这说明变量stu1、stu2 为student 类型后, 即可向这两个变量中的各 个成员赋值。在上述结构体定义中, 所有成员都是基本数据类型或数 组类型。
• 【注意】 • (1) 类型与变量是不同概念, 不要混淆。 • (2) 结构体中的成员, 可以单独使用, 其作用与地位相当于普通变量。 • (3) 成员也可以是一个结构体变量。 • (4) 成员名可以与程序中的变量名相同, 二者不代表同一对象。
• };
• 在这个结构体数据类型定义中, struct 是C 语言关键字, student 是结 构体名, 该结构体由5 个成员组成。第1 个成员为num, 字符串变量; 第2 个成员为name, 字符串变量; 第3个成员为age, 整型变量; 第4 个 成员为sex, 字符变量; 第5 个成员为score, 实型变量。
下一页 返回
10. 1 结构体数据
• 例如, 上述学生信息数据的描述可以定义结构体数据类型为
• struct student
零基础入门学习C语言课件第十章 结构体与共用体05
对链表结点的删除操作实现
实现源代码:homework_2.c
对链表的插入操作
对链表的插入是指将一个结点插入到一个已有 的链表中。
为了能做到正确插入,必须解决两个问题: ① 怎样找到插入的位置; ② 怎样实现插入。
我们可以先用指针变量p0指向待插入的结点, p1指向第一个结点。将p0->num与p1->num相比 较,如果p0->num>p1-> num ,此时将p1后移, 并使p2指向刚才p1所指的结点。
对链表的插入操作
对链表的插入操作
我们设计出程序: homework_3.c
但是这个程序有些问题需要大家齐心协 力来发掘并研究方法解决!
例如我们要实现多次插入,问题就来了! (请大家到论坛上提交自己的解决方案~)
课后练习
作业:
尝试实现插入程序并尝试制作一个学生 成绩管理系统。(有兴趣的朋友可以将 作品提交到我们的论坛交流!)
第十章结构体与共用体
试题汇编之:结构体与共用体一.选择题1.共用体定义为“union data{char ch;int x;}a;”下列语句正确的是。
A:a.ch=‟x‟;a=10; B:a a=‟x‟,10;C:a.x=10;a.ch=‟x‟; D:a=‟x‟;2.共用体定义为“union data{char ch;int x;}a;”下列语句不正确的是。
A:a={…x‟,10}; B:a.x=10;a.x++;C:a.ch=‟x‟;a.ch++; D:a.x=10;a.ch=‟x‟;3.对于:struct node{double x;char c;}*p;下列哪个赋值是错的。
A:p->x=2B:p.x=2.0 C.p->c=2 D.(*p).c=‟a‟4.对于以下结构定义:struct{int len;char *str;}*p;(*p)->str++中的++加在。
A:指针str上B:指针p上. C.str所指的内容上 D:表达式语法有错5.对如下定义:struct{char a1;int a2;}xx; union{char a1;int a2;int a3;}yy;如果sizeof(xx)的值为3,则sizeof(yy)的值应为:A:2 B:4 C:5 D:定义有错6.以下结构体变量定义语句中错误的是。
A.struct staffer{ long int code; float salary;} one;B.struct staffer{ long int code; float salary;} staffer one;C.typedef struct { long int code ; float salary;} STAFFER;D.struct { long int code; float salary; }one;-7.形如上题中定义的结构体变量,下列对此变量的输入形式中正确的是。
C语言 选择题库第10章 结构体与共用体
第10章结构体与共用体1.以下叙述中错误的是()。
A) 可以通过typedef增加新的类型B) 可以用typedef将已存在的类型用一个新的名字来代表C) 用typedef定义新的类型名后,原有类型名仍有效D) 用typedef可以为各种类型起别名,但不能为变量起别名参考答案:A【解析】关键字typedef的作用只是将C语言中的已有的数据类型作了置换,并不是增加新的类型,所以A)错误。
2.以下关于typedef的叙述错误的是A) 用typedef可以增加新类型B) typedef只是将已存在的类型用一个新的名字来代表C) 用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名D) 用typedef为类型说明一个新名,通常可以增加程序的可读性参考答案:A【解析】typedef并不是增加了新类型,而是用一个新名字替代已存在的类型,不能为变量说明一个新名,使用typedef可以增强移植性。
所以A选项错误。
3.若有以下语句typedef struct S{ int g; char h; } T;以下叙述中正确的是A) 可用S定义结构体变量B) 可用T定义结构体变量C) S是struct 类型的变量D) T是struct S类型的变量参考答案:B【解析】本题考查typedef重新声明一种结构体类型,那么T为结构体类型,而不是结构体变量,所以B选项正确。
4.设有以下语句typedef struct TT{ char c; int a[4]; } CIN;则下面叙述中正确的是A) CIN是struct TT类型的变量B) TT是struct类型的变量C) 可以用TT定义结构体变量D) 可以用CIN定义结构体变量参考答案:D【解析】本题考查typedef重新声明一种结构体类型,其中CIN为结构体类型名,而不是结构体变量,所以D 选项正确。
5.以下叙述中错误的是A) 可以用typedef将已存在的类型用一个新的名字来代表B) 可以通过typedef增加新的类型C) 用typedef定义新的类型名后,原有类型名仍有效D) 用typedef可以为各种类型起别名,但不能为变量起别名参考答案:B【解析】本题考查typedef的用法,typedef并不是增加一种新的类型,而是对已存在的类型用一个新的名字来代表,所以B选项错误。
第10章结构体与共用体
一般形式:
struct { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列; 用无名结构体直接定义 变量只能一次
10/31/2018
江苏海事职业技术学院-------第10章 结构体与共用体
说明:
结构体类型与结构体变量概念不同 类型:不分配内存; 变量:分配内存 类型:不能赋值、存取、运算; 变量:可以 结构体可嵌套 结构体成员名与程序中变量名可相同,不会混淆 结构体类型及变量的作用域与生存期
struct [结构体名] { 类型标识符 成员名; 类型标识符 成员名; ……………. };
合法标识符 可省:无名结构体 成员类型可以是 基本型或构造型
struct是关键字, 不能省略
10/31/2018
江苏海事职业技术学院-------第10章 结构体与共用体
num
2字节
…
name
20字节 1字节 2字节 4字节
10/31/2018
江苏海事职业技术学院-------第10章 结构体与共用体
10.8 共用体
共用体类型定义 定义形式:
union 共用体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. };
****类型定义不分配内存
例 union data { int i; char ch; float f; };
10/31/2018
江苏海事职业技术学院10章 结构体与共用体
用typedef定义类型
功能:用自定义名字为已有数据类型命名 类型定义简单形式: typedef type name; 例 typedef int INTEGER; 例 typedef float REAL; 例 INTEGER a,b,c; REAL f1,f2;
结构体与共用体
10.1 结构体类型和结构体变量
如:
struct date
/*声明一个结构体类型*/
{ int month;
int day;
int year;
};
struct student
{int num;
char name[20];
char sex;
int age;
struct date birthday;/*birthday是struct date类 型*/
10.1.1 结构体型的定义
如前所述,结构体是由不同数据类型的数据组成的。组成结 构体的每一个数据称为该结构体的成员。在程序中使用结构 体时,首先要对结构体的组成进行描述,这称为结构体型的 定义,结构体型的定义是确定该结构体型由哪几个成员项组 成,以及每个成员项具有什么数据类型。
下一页 返回
10.1 结构体类型和结构体变量
10.1 结构体类型和结构体变量
注意不要忽略最后的分号。struct student向编译系统声 明这是一个“结构体类型”,它包括num、name、sex、 age、score和addr等不同类型的数据项。应当说明 struct student是一个类型名,它和系统提供的标准类型 (如int、char、float和double等)一样具有同样的地位 和作用,都可以用来定义变量的类型,只不过结构体类型需 要由用户自己指定而已。
上一页 下一页 返回
10.1 结构体类型和结构体变量
例10-1 定义如下结构体型。 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; };
结构体和共用体-2结构体和数组的嵌套
typedef struct {
int year; int month; int day; }DATE;
date
C语言程序设计
typedef struct date {
int year; char month[10]; int day; }DATE;
typedef struct student {
long studentID; char studentName[10]; char studentSex; DATE birthday; int score[4]; }STUDENT;
第10章 结构体和共用体
结构体数组的定义和初始化
typedef struct {
int year; int month; int day; }DATE;
date
typedef struct student {
long studentID; char studentName[10]; char studentSex; DATE birthday; int score[4]; }STUDENT;
C语言程序设计
SuXiaoHong
Q&A
C语言程序设计
第10章 结构体和共用体
结构体数组的定义和初始化
学号
姓名
性别
出生日期
年
月
日
数学
1
王刚
M
1991
M
1992
8
20
88
3
王丽红
F
1991
9
19
98
4
陈莉莉
F
1992
3
22
87
英语 计算机 原理 程序设计
计算机基础与C语言程序设计(第三版)第10章-结构体与共用体
注意: (1) 定义了一种类型,不是变量。 (2) 成员可以是任意类型, (3) 最后的分号“;”不能省略。 (4) 可以嵌套定义,如:
char addr[30];
};
num
name
sex
041000 Li Ping
M
041001 Liu Yi
F
age
Score
adrr
18
78
Beijing
20
88
float score[3];
}stu={“wang_li”, 81,77,96};
【例10.1】输入某学生的姓名、年龄和5门功课成绩, 计算平均成绩并输出。
#include <stdio.h> void main() {struct student
{ char name[10]; int age; float score[5],ave;
}
for(i=0;i<N-1;i++) { k=i; for(j=i+1;j<N;j++) if(a[k].m<a[j].m) k=j; temp=a[i]; a[i]=a[k]; a[k]=temp;
运行结果: 3 2↙ 1 1↙ 5 4↙ 5.00+4.00i 3.00+2.00i 1.00+1.00i
第10章 结构体与共用体
第10章 结构体与共用体
10.1 结构体类型的定义 10.2 结构体类型变量 10.3 结构体数组 10.4 结构体和指针 10.5 结构体和函数 10.6 链 表 10.7 共用体 10.8 枚 举 10.9 用typedef定义类型
num name sex
零基础入门学习C语言课件第十章 结构体与共用体06
或者为:
enum weekday{ sun,mou,tue,wed,thu,fri,sat }a, b, c;
或者为:
enum { sun,mou,tue,wed,thu,fri,sat }a, b, c;
共用体变量的引用方式
只有先定义了共用体变量才能引用它,而且不 能引用共用体变量,而只能引用共用体变量中 的成员。
例如:前面定义了a、b、c为共用体变量
a.i (引用共用体变量中的整型变量i) a.ch(引用共用体变量中的字符变量ch) a.f (引用共用体变量中的实型变量f)
共用体类型数据的特点
不能把共用体变量作为函数参数,也不能使函 数带回共用体变量,但可以使用指向共用体变 量的指针
共用体类型可以出现在结构体类型定义中,也 可以定义共用体数组。反之,结构体也可以出 现在共用体类型定义中,数组也可以作为共用 体的成员。
应用情况
设有若干个人员的数据,其中有学生和教师。 学生的数据中包括:姓名、号码、性别、职 业、班级。教师的数据包括:姓名、号码、 性别、职业、职务。可以看出,学生和教师 所包含的数据是不同的。现要求把它们放在 同一表格中。
float f;
}a,b,c;
};
union data a,b,c;
共用体和结构体的比较:
结构体变量所占内存长度是各成员占的内存 长度之和。每个成员分别占有其自己的内存 单元。
共用体变量所占的内存长度等于最长的成员 的长度。
例如: 上面定义的“共用体”变量a、b、c各 占4个字节(因为一个实/整型变量占4个字 节),而不是各占4+1+4=7个字节。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第10章结构体与共用体考核知识点●结构体与共用体类型数据的定义方法和引用方法●用指针和结构体构成链表,单向链表的建立、输出、插入与删除重要考点●对结构体的声明及定义●访问结构体的成员的方法●熟悉对链表的操作10.1 用typedef说明一种新类型名C语言规定可以用typedef说明一种新的类型名,说明新类型名的语句一般形式为:typedef 类型名称标识符;其中,“类型名”一定是在此语句之前已有定义的类型标识符。
“标识符”是一个用户定义标识符,用来标识新的类型名。
typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并没有产生新的数据类型,因此,原有的类型名依然有效。
提示:声明一个新的类型名的具体步骤如下:⑴先按定义变量的方法写出定义的主体(如float a;).⑵将变量名换成新类型名(如将a换成FLO)。
⑶在最左面加上关键字typedef(如typedef FLO).⑷然后可以用新类型名去定义其他的变量(如FLO b;).10.2 结构体类型在实际工作中,当我们需要把一些不同类型,但相互之间又存在着联系的信息组合应用时,就要用到结构体。
结构体是一种看似复杂却非常灵活的构造数据类型。
在通常情况下,一个结构体类型由若干个称为成员(或称为域)的部分组成。
不同的结构体类型可根据需要由不同的成员组成。
但对于某个具体的结构体类型,其成员的数量必须固定,这一点与数组相同;但结构体中各个成员的类型可以不同,这是结构体与数组的重要区别。
例如,我们常用的“时间”可以由以下3个部分描述:小时(hour)、分(minute)、秒(second)。
它们都可以用整型数表示,可以把这3个成员组成一个整体,并给它取名为time,这就是一个简单的结构体。
声明一个结构体类型的一般形式为:struct 结构体名{成员表列};struct是C语言中的关键字,是结构体类型的标志。
“结构体名”用做结构体类型的标志,它又称“结构体标记”(structure)。
大括号内是该结构体中各成员,成员表列是由若干个变量类型名及变量名组成的。
这些成员共同组成一个结构体。
例如,上面提到的“时间”结构体类型可以说明如下:struct time{int hour;int minute;int second;};其中,time就是结构体名,hour、minute、second都是成员,并且都应进行类型声明,每个成员也就是结构体中的一个域。
成员的命名规则与变量名相同。
所以结构体类型刀可以用以下形式说明:struct 结构体标识名{类型名1 结构体成员名表1;类型名2 结构体成员名表2;...类型名n 结构体成员名表n;}说明:⑴“结构体标识名”和“结构体成员名表”都必须是合法的用户定义的标识符。
⑵每个“结构体成员名表”中都可以含有多个同类型的成员名,它们之间以逗号分隔。
⑶结构体类型说明中的“类型名1”~“类型名n”,不仅可以是简单数据类型也可以是某种结构体类型。
当结构体说明中又包含结构体时,称为结构体的嵌套。
⑷ANSI C标准规定结构体至多允许嵌套15层,并且允许内嵌结构体成员的名字与外层成员的名字相同。
10.3 结构体类型变量的定义前面只是指定了一个结构体类型,为了能在程序中使用结构体类型的数据,就需要定义结构体类型的变量,并在其中存放具体的数据。
可以用如下方法定义结构体类型变量。
一、先声明结构体类型再定义变量名如上面已经定义了一个结构体类型struct time,可以如下定义:struct time time1,time2;结构体类型名结构体变量名;time1和time2为struct time类型变量,即它们都具有struct time类型的结构。
二、在声明类型的同时定义变量其一般形式为:struct 结构体名{成员类型} 变量名表列;三、直接定义结构体类型变量其一般形式为:struct{成员表列}变量名表列;即不出现结构体名。
提示:类型与变量是两个不同的概念,使用时应注意区别。
只能对变量赋值、存取或运算,而不能对一个类型进行赋值、存取或运算。
可以单独使用结构体中的成员,它与普通变量的作用相同。
10.4 结构体变量的引用在定义了结构体变量以后,当然可以引用这个变量。
但应注意:1.结构体变量不能作为一个整体而对其进行任何操作,只能对结构体变量中的各个成员分别进行输入和输出等操作。
结构体变量中的成员用以下方式引用:结构体变量名.成员名2.如果结构体的某个成员本身又是一个结构体类型,则可以使用若干个成员运算符“.”,一级一级地找到最低的一级成员,只能对最低一级成员进行赋值或存取及运算。
3.结构体变量的初始化,是指逐个对结体变量的各个成员进行初始化的过程。
10.5 结构体数组和普通数组一样,结构体数组中和每个元素都属于同一数据类型(结构体类型),只不过各个元素本身又都包含多个成员项,例如,一个结构体变量中存放着一组数据(如某个产品的名称、型号、尺寸、颜色等数据),现在如果有10个这样产品的数据需要参加运算,显然应当用到结构体数组。
和定义结构体变量的方法相仿,只需说明其为数组即可。
其一般形式为:struct 结构体变量名{成员表列}数组名[常量表达式];结构体数组的初始值应顺序地放在一对花括号中,由于数组中的每个元素都是一个结构体,因此通常将成员的值依次放在一对花括号中,以便区分各个元素。
10.6 指向结构体类型数据的指针一个结构体变量的指针就是用来指向该结构体类型的存储单元,并指向结构体变量所占据的内存段的起始地址。
一、指向结构体变量的指针看下面的例子:#include <string.h>#include <stdio.h>main(){struct objects{char name[20];int size;char color[10];float weight;float height;};struct objects obj1;struct objects *p;p=&obj1;strcpy(,”pen”);obj1.size=10;strcpy(obj1.colur,”black”);obj1.weight=50.5;obj1.height=18.5;printf(“name:%s\nsize:%d\ncolor:%s\nweight:%f\nheight:%f\n”,,obj1.size,obj1.we ight,obj1.height);printf(“name:%s\nsize:%d\ncolor:%s\nweight:%f\nheight:%f\n”,(*p).name,(*p).size,(*p).weight, (*p).height);}我们声明了一个struct objects类型,并且定义了一个该类型的变量obj1,又定义了一个指向struct objects类型的数据指针p,并且将p指向obj1,接下来是对各成员赋值。
第一个printf语句用“.”的方式将obj1的成员的值输出。
第二个printf语句用(*p)将obj1的成员的值输出,因为成员运算符“.”的优先级高于“*”运算符,所以(*p)的两侧的圆括号不能省略。
以上两个printf函数语句的输出结果是相同的。
我们可用p->name来代替(*p).name,其中“—>”称为指向运算符,它由两部分组成:“-”减号和“>”大于号,它们之间不能有空格,所以“结构体变量.成员名”、“*结构体指针变量名.成员名”和“结构体指针变量名—>成员名”这3种形式是等价的。
二、指向结构体数组的指针结构体数组及其元素也可以用指针变量来指向。
在使用指针变量指向结构体数组时,只要把该结构体数组中的每个元素当做普通的结构体变量使用就可以了。
例如:#include <stdio.h>struct objects{char name[20];int size;char color[10];float weight;float height;};struct objectsobj[3]={{“pen”,10,”black”,50.5,18.5},{“notebook”,20,”blue,180,19.5”},{“bag”,50,”red”,2000,37.5}};main(){struct objects *p;printf(“name size color weight height\n”);for(p=obj;p<obj+3;p++)printf(“%10s%d%-20s$6.5f%6.5f\n”,p->name, p->size, p->color, p->weight, p->height);}这样就可以利用指针变量来逐个把结构体数组中的元素的各个域输出。
说明:如果p的初值为obj,即指向第一个元素,则p+1就指向下一个元素。
例如:(++p)->name;先使p自加1,然后得到它指向的元素中的name成员值。
而(p++) ->name;先得到p->name的值,然后使p自加1,指向obj[1];。
p只能指向一个struct objects类型的数据,不能指向obj数组元素中的某一成员(即p的地址不是成员的地址)。
例如,p=&obj[1].name;是不对的。
对结构体变量中的每个成员,都可以像普通变量一样,对它进行同类变量所允许的任何操作。
三、用结构体变量和指向结构体的指针用为函数参数将一个结构体变量的值传递给另一个函数,有如下方法:1.结构体变量的成员作为实参传递给主调函数。
2.可以用结构体变量作为一个整体实参3.C语言,允许将结构体变量的地址作为实参传递,这时,对应的应该是一个基类型相同的结构体类型的指针。
10.7 链表链表是一种常见的重要的数据结构,它是动态地进行存储单元分配的一种结构。
如图10-1所示是一种简单的链表。
由示意图可以乍出链表中的各元素在内趣中不一定是连续存放的。
要找链表中某一元素,必须先找到上一个元素,根据该元素提供的下一元素的地址才能找到下一个元素。
所以,如果没有头指针(head),则整个链表都无法访问。
另外一点,这种链表的数据结构,必须利用指针变量才能实现。
即一个节点中应包含一个指针变量,用它存放下一节点的地址。
当然也可以不通过指针变量,用其他方式也可以构建简单莲表。
下面通过一个例子来说明如何建立和输出一个简单链表。
#include <string.h>#include <stdio.h>struct node{int data;struct node *next;}typedef struct node NODETYPE;main(){NODETYPE s1,s2,s3,*begin,*p;s1.data=100;s2.tata=200;s3.data=300;begin=&s1;s1.next=&s2;s2.next=&s3;s3.next=’\0’;p=begin;while(p){printf(“%d”,p->data);p= p->next;}printf(“\n”);}main()函数中这定义的变量s1,s2,s3都是结构体变量,它们都含有data和next两个成员。