c10-结构体、共用体及枚举类型课件.ppt

上传人(卖家):晟晟文业 文档编号:4687859 上传时间:2023-01-01 格式:PPT 页数:42 大小:499.75KB
下载 相关 举报
c10-结构体、共用体及枚举类型课件.ppt_第1页
第1页 / 共42页
c10-结构体、共用体及枚举类型课件.ppt_第2页
第2页 / 共42页
c10-结构体、共用体及枚举类型课件.ppt_第3页
第3页 / 共42页
c10-结构体、共用体及枚举类型课件.ppt_第4页
第4页 / 共42页
c10-结构体、共用体及枚举类型课件.ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

1、Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C C C语言程序设计语言程序设计第第1010章章 结构体、共同体与枚举类型结构体、共同体与枚举类型Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C问题:实际应用中,通常会将相关的不同类型的数据项组问题:实际应用中,通常会将相关的不同类型的数据项组成一个有机的整体,这些数据项在计算机中如何表示?成一个有机的整体,这些数据项在计算机中

2、如何表示?由若干由若干“成员成员”组成组成,每一个成员可以是一,每一个成员可以是一个基本个基本数据类型数据类型或者是一个或者是一个结构体类型结构体类型。这些数据的特点是:这些数据的特点是:1 1、有多项不同类型数据组成、有多项不同类型数据组成2 2、各项数据占用空间大小有可能不同、各项数据占用空间大小有可能不同 C C语言为了表示这种数据,定义了语言为了表示这种数据,定义了一种数据结构:结构体。一种数据结构:结构体。引子引子Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C10.110.

3、210.310.410.5结构体变量的定义结构体变量的定义结构体变量的引用和初始化结构体变量的引用和初始化结构体数组结构体数组结构体指针变量结构体指针变量结构体与函数结构体与函数本章主要内容本章主要内容Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C10.610.710.810.910.10位段结构体位段结构体链表链表共同体共同体枚举类型枚举类型用用typedef定义类型定义类型本章主要内容本章主要内容Copyright Henan Polytechnic University 语语言

4、言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C结构体类型定义结构体类型定义结构体是结构体是一种一种构造构造数据类型数据类型一个一个“结构体结构体”类型由若干类型由若干“成员成员”组成,每一个成员组成,每一个成员可以是一个基本数据类型或者是一个结构体类型。可以是一个基本数据类型或者是一个结构体类型。结构体类型定义结构体类型定义struct struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.;10.1 结构体变量的定义结构体变量的定义struct stustruct stu int num;int num;ch

5、ar name20;char name20;char sex;char sex;int age;int age;float score;float score;struct date birthday;struct date birthday;struct stu boy1,boy2;struct stu boy1,boy2;Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C定义义结构体类型时,应注意u 成员类型可以是除本身结构体类型之外的任何已有类型,也可以是成员类型可以是除本身结构体

6、类型之外的任何已有类型,也可以是任何已有类型任何已有类型(包括本身类型在内包括本身类型在内)的指针类型,即构成嵌套的结构。的指针类型,即构成嵌套的结构。u 当一个结构体类型定义在函数之外时,它具有全局作用域;若定义当一个结构体类型定义在函数之外时,它具有全局作用域;若定义在任一对花括号之内,则具有局部作用域,其作用范围是所在花括在任一对花括号之内,则具有局部作用域,其作用范围是所在花括号构成的块。号构成的块。u 结构体是一种复杂的数据类型,是数目固定、类型不同的若干成员结构体是一种复杂的数据类型,是数目固定、类型不同的若干成员的集合,结构体类型的定义只是列出了该结构的组成情况,编译系的集合,结

7、构体类型的定义只是列出了该结构的组成情况,编译系统并未因此而分配存储空间,当定义了结构体类型的变量或数组后,统并未因此而分配存储空间,当定义了结构体类型的变量或数组后,编译系统才会分配存储空间。编译系统才会分配存储空间。u 成员名可以与程序中的变量名相同,二者不代表同一个对象。成员名可以与程序中的变量名相同,二者不代表同一个对象。u 如果两个结构体的成员类型、名称、个数相同,但结构体名不同,如果两个结构体的成员类型、名称、个数相同,但结构体名不同,也是两个不同的结构类型。也是两个不同的结构类型。Copyright Henan Polytechnic University 语语言言第第 10 1

8、0 章章结结构构体体共共同同休休及及枚枚举举类类型型C C结构体变量的定义结构体变量的定义先先定义结构体类型,再定义结构体变量定义结构体类型,再定义结构体变量 先定义结构体类型,再定义结构体变量先定义结构体类型,再定义结构体变量例如例如在定义结构体类型的同时定义结构体变量在定义结构体类型的同时定义结构体变量 例如例如直接定义结构体变量直接定义结构体变量 例如例如struct stustruct stu int num;int num;char name20;char name20;char sex;char sex;int age;int age;float score;float score

9、;struct date birthday;struct date birthday;struct stu boy1,boy2;struct stu boy1,boy2;struct stustruct stu int num;int num;char name20;char name20;char sex;char sex;int age;int age;float score;float score;struct date struct date birthday;birthday;boy1,boy2;boy1,boy2;structstruct int num;int num;char

10、name20;char name20;char sex;char sex;int age;int age;float score;float score;struct date struct date birthday;birthday;boy1,boy2;boy1,boy2;Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C本章主要内容本章主要内容10.110.210.310.410.5结构体变量的定义结构体变量的定义结构体变量的引用和初始化结构体变量的引用和初始化结构体数组结构体数组

11、结构体指针变量结构体指针变量结构体与函数结构体与函数Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C结构体变量的引用结构体变量的引用引用方式:引用方式:结构体变量名结构体变量名.成员名成员名其中点号其中点号“.”称为成员运算符,它在所有的运算符中称为成员运算符,它在所有的运算符中优先级最高。优先级最高。引用结构体变量时,应注意以下几点引用结构体变量时,应注意以下几点不能将一个结构体变量作为一个整体进行输入输出不能将一个结构体变量作为一个整体进行输入输出 如果成员本身又是一个结构体类型,

12、则要用若干个成如果成员本身又是一个结构体类型,则要用若干个成员运算符逐级找到最低一级的成员才能引用员运算符逐级找到最低一级的成员才能引用 对成员变量可以像普通变量一样进行各种运算对成员变量可以像普通变量一样进行各种运算 可以引用结构体变量成员的地址,也可以引用结构体可以引用结构体变量成员的地址,也可以引用结构体变量的地址变量的地址 10.2 结构体变量的引用和初始化结构体变量的引用和初始化例如,对前面定义的结构变量例如,对前面定义的结构变量boy1boy1和和boy2boy2,其成员的,其成员的引用形式如下。引用形式如下。boy1.num boy1.num /*第一个人的学号第一个人的学号 *

13、/boy2.sex boy2.sex /*第二个人的性别第二个人的性别 */Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C结构体变量的初始化结构体变量的初始化 本例中,对结构体变量本例中,对结构体变量boy1作了初始化赋值,然后把作了初始化赋值,然后把boy1的值整体赋予的值整体赋予boy2,最后用,最后用printf函数输出函数输出boy2各各成员的值。成员的值。例对结构变量初始化。例对结构变量初始化。#include#include main()main()struct stu

14、struct stu int num;int num;char name20;char name20;char sex;char sex;int age;int age;float score;float score;boy2,boy1=102,Zhang ping,M,20,78.5;boy2,boy1=102,Zhang ping,M,20,78.5;boy2=boy1;boy2=boy1;printf(Number:%dnName:%sn,boy2.num,boy2.name);printf(Number:%dnName:%sn,boy2.num,boy2.name);printf(Se

15、x:%cnage:%dScore:%4.1fn,boy2.sex,boy2.age,printf(Sex:%cnage:%dScore:%4.1fn,boy2.sex,boy2.age,boy2.score);boy2.score);运行结果:运行结果:Number:102Number:102Name:Zhang pingName:Zhang pingSex:MSex:MAge:20Age:20Score:78.5Score:78.5Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C本章

16、主要内容本章主要内容10.110.210.310.410.5结构体变量的定义结构体变量的定义结构体变量的引用和初始化结构体变量的引用和初始化结构体数组结构体数组结构体指针变量结构体指针变量结构体与函数结构体与函数Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C结构体数组的定义结构体数组的定义结构体数组的每一个元素都具有相同的结构体类型结构体数组的每一个元素都具有相同的结构体类型 三种形式:三种形式:形式一形式一:struct student int num;char name20;ch

17、ar sex;int age;struct student stu2;形式二形式二:struct student int num;char name20;char sex;int age;stu2;形式三形式三:struct int num;char name20;char sex;int age;stu2;10.3 结构体数组结构体数组Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C结构体数组初始化结构体数组初始化一个结构体数组的元素相当于一个结构体变量,引用一个结构体数组的元素相当

18、于一个结构体变量,引用结构体数组元素的一般形式为结构体数组元素的一般形式为 结构体数组名结构体数组名下标下标.成员名成员名例如例如#include#include struct stustruct stu int num;int num;char name20;char name20;char sex;char sex;float score;float score;boy5=boy5=101,Li ping,M,45,101,Li ping,M,45,102,Zhang ping,M,62.5,102,Zhang ping,M,62.5,103,He fang,F,92.5,103,He f

19、ang,F,92.5,104,Cheng ling,F,87,104,Cheng ling,F,87,105,Wang ming,M,58 105,Wang ming,M,58;main()main()int i,c=0;int i,c=0;float ave,s=0;float ave,s=0;for(i=0;i5;i+)for(i=0;i5;i+)s+=boyi.score;s+=boyi.score;if(boyi.score60)c+=1;if(boyi.score成员名成员名运算符运算符“-”的优先级比较高,高于算术运算符、关系运算符、的优先级比较高,高于算术运算符、关系运算符、逻辑

20、运算符逻辑运算符例如例如+pstu-num 等价于等价于+(pstu-num)结构体指针访问结构体变量的形式也可以表示为结构体指针访问结构体变量的形式也可以表示为(*结构体指针变量结构体指针变量).成员名成员名例如例如(*pstu).num应该注意应该注意(*pstu)两侧的括号不可少,因为成员符两侧的括号不可少,因为成员符“.”的优先级的优先级高于高于“*”10.4 结构体指针变量结构体指针变量存放结构体变量在内存的起始地址存放结构体变量在内存的起始地址以下三种形式是等价以下三种形式是等价结构体变量名结构体变量名.成员名成员名(*结构体指针变量结构体指针变量).).成员名成员名结构体指针变量

21、结构体指针变量-成员名成员名11_6_1.cpp 11_6_2.cpp11_6_1.cpp 11_6_2.cppCopyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C指向结构体数组的指针指向结构体数组的指针 普通数组可以通过指针变量来访问,同样,也可以通普通数组可以通过指针变量来访问,同样,也可以通过结构体指针访问结构体数组。过结构体指针访问结构体数组。例如例如 pstu=boy;或或pstu=&boy0;pstu就指向了该结构体数组的首地址(即第一个元素就指向了该结构体数组的首地址(即第一

22、个元素boy0的地址)。结构体指针的地址)。结构体指针pstu加加1则指向下一个元则指向下一个元素素 用指针变量输出结构体数组。用指针变量输出结构体数组。numnamesexscoreboy0psboy1boy2ps+111_6_3.cpp11_6_3.cppCopyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C本章主要内容本章主要内容10.110.210.310.410.5结构体变量的定义结构体变量的定义结构体变量的引用和初始化结构体变量的引用和初始化结构体数组结构体数组结构体指针变量结构

23、体指针变量结构体与函数结构体与函数Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C 结构体变量作为函数参数结构体变量作为函数参数 结构体变量的结构体变量的成员成员可作为函数的实参,用法和普通变可作为函数的实参,用法和普通变量作实参一样量作实参一样 例如例如 11_6_4.cpp 10.5 10.5 结构体与函数结构体与函数Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C返回结构

24、体类型数据的函数返回结构体类型数据的函数函数的返回值可以是整型、实型或指针类型等函数的返回值可以是整型、实型或指针类型等,也可以是结构体类型。也可以是结构体类型。例如例如11_6_5.cpp11_6_5.cppCopyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C结构体指针作为函数参数结构体指针作为函数参数结构体指针作为函数的参数时,传递的只是地址,从结构体指针作为函数的参数时,传递的只是地址,从而减少结构变量作参数时引起的空间和时间上的开销而减少结构变量作参数时引起的空间和时间上的开销 例

25、如例如10_7.cpp10_7.cppCopyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C本章主要内容本章主要内容10.610.710.810.910.10位段结构体位段结构体链表链表共同体共同体枚举类型枚举类型用用typedef定义类型定义类型Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C位段结构体类型和位段结构体变量位段结构体类型和位段结构体变量C语言允许在一个结构体中以位为

26、单位来指定其成员所语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为占内存长度,这种以位为单位的成员称为“位段位段”或或称称“位域位域”定义定义例如例如位段结构体变量的定义与结构体变量定义方式相同位段结构体变量的定义与结构体变量定义方式相同位域的引用位域的引用一般形式为:一般形式为:位段结构体变量位段结构体变量.位域名位域名例如例如 10.6 10.6 位段结构体位段结构体Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C位段结构体类型和位段结构体变量位段

27、结构体类型和位段结构体变量C语言允许在一个结构体中以位为单位来指定其成员所语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为占内存长度,这种以位为单位的成员称为“位段位段”或或称称“位域位域”定义定义例如例如位段结构体变量的定义与结构体变量定义方式相同位段结构体变量的定义与结构体变量定义方式相同位域的引用位域的引用一般形式为:一般形式为:位段结构体变量位段结构体变量.位域名位域名例如例如 10_8.cpp 10.6 10.6 位段结构体位段结构体struct struct 位段结构体名位段结构体名 类型标识符类型标识符 位域位域1 1:位域长度;:位域长度;类型

28、标识符类型标识符 位域位域2 2:位域长度;:位域长度;.类型标识符类型标识符 位域位域n n:位域长度;:位域长度;struct bsstruct bs int a:8;int a:8;int b:2;int b:2;int c:6;int c:6;data;data;Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C本章主要内容本章主要内容10.610.710.810.910.10位段结构体位段结构体链表链表共同体共同体枚举类型枚举类型用用typedef定义类型定义类型Copyrig

29、ht Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C链表概述链表概述概述,是一种数据结构,可以动态分配内存,链表由概述,是一种数据结构,可以动态分配内存,链表由结点组成,每个结点有数据域和指针域两个域。结点组成,每个结点有数据域和指针域两个域。“头头指针指针”指向第一个元素结点,指针域指向下一结点。指向第一个元素结点,指针域指向下一结点。结构定义,如结构定义,如形式如右图所示形式如右图所示例如例如 10.7 10.7 链表链表struct stustruct stu int num;int num;ch

30、ar name20 char name20;struct stu struct stu*next next;struct stustruct stu int num;int num;char name20;char name20;struct stu struct stu*next;next;Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C动态内存管理动态内存管理内存空间分配函数内存空间分配函数malloc原型原型 void*malloc(unsigned int size)例例 fl

31、oat*pc;pc=(float*)malloc(5*sizeof(float);内存空间函数内存空间函数calloc原型原型 void*calloc(unsigned n,unsigned size);例例 pc=(float*)calloc(8,sizeof(float);释放内存空间函数释放内存空间函数free 原型原型 void free(void*p);例如例如动态数组的建立和使用。动态数组的建立和使用。#include#include#include#include main()main()float float*pf;pf;int i,n;int i,n;scanf(%d,&n)

32、;scanf(%d,&n);pf=(float pf=(float*)malloc(n)malloc(n*sizeof(float);sizeof(float);for(i=0;in;i+)for(i=0;in;i+)pfi=1.1fpfi=1.1f*(i+1);/(i+1);/*由后缀由后缀f f指定为指定为floatfloat型常量型常量*/for(i=0;in;i+)for(i=0;in;i+)printf(%f ,pfi);printf(%f ,pfi);printf(n);printf(n);free(pf free(pf);/);/*调用调用freefree函数时,会自动将指针函数

33、时,会自动将指针pfpf的类型转的类型转换为换为voidvoid指针类型指针类型 */运行结果:运行结果:551.100000 2.200000 3.300000 4.400000 1.100000 2.200000 3.300000 4.400000 5.5000005.500000Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C创建链表创建链表读取数据;读取数据;生成新结点;生成新结点;将数据存入新结点;将数据存入新结点;将新结点插入到链表中。将新结点插入到链表中。例如:从键盘读入

34、学生的信息,包括学号、成绩,当例如:从键盘读入学生的信息,包括学号、成绩,当输入的学号为输入的学号为0时,表示建立链表结束。时,表示建立链表结束。流程图如图流程图如图#include#include#include#include#define LEN sizeof(struct stu#define LEN sizeof(struct stu)/)/*LENLEN为结构体类型为结构体类型struct stustruct stu的长度的长度*/struct stustruct stu int num;int num;float score;float score;struct stu stru

35、ct stu*next;next;struct stu struct stu*creat()creat()struct stu struct stu*headhead;/;/*用于指向链表的第一个结点,即头指针用于指向链表的第一个结点,即头指针 */struct stu struct stu*p;p;/*用于指向新生成的结点用于指向新生成的结点 */struct stu struct stu*tailtail;/;/*用于指向链表的最后一个结点用于指向链表的最后一个结点 */int x;int x;tail=head=NULL;tail=head=NULL;scanf(%d,&x);scanf

36、(%d,&x);while(x!=0)while(x!=0)p=(struct stu p=(struct stu*)malloc(LEN);)malloc(LEN);p-num=x;p-num=x;if(head=NULL)head=p;if(head=NULL)head=p;scanf(%f,&p-score);scanf(%f,&p-score);if(tail!=NULL)tail-next=p;if(tail!=NULL)tail-next=p;tail=p;tail=p;scanf(%d,&x);scanf(%d,&x);if(tail!=NULL)tail-next=NULL;i

37、f(tail!=NULL)tail-next=NULL;return(head);return(head);Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C顺序访问链表中的结点顺序访问链表中的结点所谓所谓“访问访问”就是对各结点的数据域中的值进行修改、就是对各结点的数据域中的值进行修改、运算、输出等运算、输出等 例如:编写函数,顺序输出链表中各结点数据域中的例如:编写函数,顺序输出链表中各结点数据域中的内容。顺序输出链表的算法比较简单,只需利用一个内容。顺序输出链表的算法比较简单,只需

38、利用一个工作指针工作指针(p)从头到尾依次指向链表中的每个结点,当从头到尾依次指向链表中的每个结点,当指针指向某个结点时,就输出该节点数据域中的内容,指针指向某个结点时,就输出该节点数据域中的内容,直到遇到链表结束标志为止。如果链表为空,就输出直到遇到链表结束标志为止。如果链表为空,就输出提示信息。提示信息。void list(struct stu void list(struct stu*head)head)struct stu struct stu*p;p;p=head;p=head;if(head!=NULL)if(head!=NULL)printf(The list records a

39、re:n);printf(The list records are:n);do do printf(%dt%5.1fn,p-num,p-score);printf(%dt%5.1fn,p-num,p-score);p=p-next;p=p-next;/*p p指针后移指针后移 */while(p!=NULL);while(p!=NULL);else else printf(The list is null);printf(The list is null);main()main()struct stu struct stu*head;head;head=creat();head=creat()

40、;list(head);list(head);运行结果:运行结果:101 90101 90102 89102 8900The list records are:The list records are:101 90.0101 90.0102 89.0102 89.0Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C在链表中插入结点在链表中插入结点 指将一个结点插入到一个已有链表中,因此,创建链表的过程,指将一个结点插入到一个已有链表中,因此,创建链表的过程,也可以理解为将一个个结点插入到

41、空链表中。也可以理解为将一个个结点插入到空链表中。算法过程算法过程 输入数据输入数据 生成新结点生成新结点 将数据存入新结点将数据存入新结点 在链表中寻找第一个大于新结点学号的结点在链表中寻找第一个大于新结点学号的结点 如果链表为空,直接插入新结点,即新结点为链表的唯一的结如果链表为空,直接插入新结点,即新结点为链表的唯一的结点点 查找成功,该结点为链表的第一个结点,将链表的头指针指向查找成功,该结点为链表的第一个结点,将链表的头指针指向新结点,新结点的新结点,新结点的next域指向原来链表的第一个结点,即插到域指向原来链表的第一个结点,即插到表头之前表头之前 查找成功,该结点不是链表的第一个

42、结点,将新结点插入到该查找成功,该结点不是链表的第一个结点,将新结点插入到该结点之前,即插到表的中间结点之前,即插到表的中间 查找不成功,插入到链表末尾的后面查找不成功,插入到链表末尾的后面 例如:编写函数,将一个结点插入到一个已有学生链表中,设已例如:编写函数,将一个结点插入到一个已有学生链表中,设已有链表按学号由小到大顺序排列。有链表按学号由小到大顺序排列。程序运行过程程序运行过程 struct stu struct stu*insert(struct stu insert(struct stu*head,struct stu head,struct stu*stud)stud)struc

43、t stu struct stu*p0;p0;/*p0 p0指向要插入的新结点指向要插入的新结点 */struct stu struct stu*p1;p1;/*p1 p1指向链表中第一个学号大于新结点的学号的结点指向链表中第一个学号大于新结点的学号的结点 */struct stu struct stu*p2;p2;/*p2p2指向指向p1p1的前驱结点,即的前驱结点,即p2p2的的nextnext域指向域指向p1 p1*/p0=stud;p0=stud;p1=head;p1=head;if(head=NULL)if(head=NULL)/*情况情况,原来的链表为空表,原来的链表为空表 */h

44、ead=p0;head=p0;p0-next=NULL;p0-next=NULL;else else while(p1!=NULL)&(p0-num=p1-num)while(p1!=NULL)&(p0-num=p1-num)/*查找。两个条件的顺序不能对调,否则查找。两个条件的顺序不能对调,否则p1p1的值为的值为NULLNULL时,还要再访问时,还要再访问p1-num p1-num,将出现访问零地址的错误,将出现访问零地址的错误 */p2=p1;p2=p1;p1=p1-next;p1=p1-next;/*p1 p1指针后移一个结点指针后移一个结点 */if(p1!=NULL)if(p1!=

45、NULL)/*与条件与条件p0-numnump0-numnum一样一样 */if(head=p1)head=p0;if(head=p1)head=p0;/*情况情况 */else p2-next=p0;else p2-next=p0;/*情况情况 */p0-next=p1;p0-next=p1;else else /*情况情况 */p2-next=p0;p2-next=p0;p0-next=NULL;p0-next=NULL;return head;return head;main()main()/*该改程序用到了例该改程序用到了例10.1110.11的的listlist函数函数 */stru

46、ct stu struct stu*newstu,newstu,*head;head;head=NULL;head=NULL;int num;int num;scanf(%d,&num);scanf(%d,&num);while(num!=0)while(num!=0)newstu=(struct stu newstu=(struct stu*)malloc(sizeof(struct stu);)malloc(sizeof(struct stu);newstu-num=num;newstu-num=num;scanf(%f,&newstu-score);scanf(%f,&newstu-sc

47、ore);head=insert(head,newstu);head=insert(head,newstu);scanf(%d,&num);scanf(%d,&num);list(head);list(head);运行结果:运行结果:102 95102 95100 94100 94101 93101 93103 99103 9900The list records are:The list records are:100 94.0100 94.0101 93.0101 93.0102 95.0102 95.0103 99.0103 99.0Copyright Henan Polytechnic

48、 University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C在链表中删除结点在链表中删除结点过程过程从从p1指向的第一个结点开始,检查其数据是否等于给定的关指向的第一个结点开始,检查其数据是否等于给定的关键字键字(如学号如学号),如果相等就将该结点删除,否则,如果相等就将该结点删除,否则p1后移一个结后移一个结点,再如此进行下去,直到遇到表尾为止。点,再如此进行下去,直到遇到表尾为止。如果删除的是第一个结点如果删除的是第一个结点(由由p1指向指向),例如,删除学号为,例如,删除学号为100的的学生结点,头指针指向第二个结点,操作为:学生结点,头指针指

49、向第二个结点,操作为:head=p1-next,如图如图10-6所示所示 如果要删除的不是第一个结点,例如,删除学号为如果要删除的不是第一个结点,例如,删除学号为102的学生结的学生结点,即让学号为点,即让学号为101的学生结点的学生结点(由由p2指向指向)的的next指针域指向学指针域指向学号为号为103的学生结点,操作为:的学生结点,操作为:p2-next=p1-next,如图,如图10-7所所示示 例如:编写链表删除函数,根据输入的学号删除学生结点。例如:编写链表删除函数,根据输入的学号删除学生结点。struct stu struct stu*del(struct stu del(str

50、uct stu*head,int num)head,int num)struct stu struct stu*p1;p1;/*p1p1指向要删除的结点指向要删除的结点*/struct stu struct stu*p2;p2;/*p2p2指向要删除的结点的前驱结点指向要删除的结点的前驱结点*/if(head=NULL)if(head=NULL)/*空链表空链表*/printf(The list is NULLn);printf(The list is NULLn);else else p1=head;p1=head;while(p1!=NULL&p1-num!=num)while(p1!=N

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(c10-结构体、共用体及枚举类型课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|