《结构与联合》 (2)ppt课件_第1页
《结构与联合》 (2)ppt课件_第2页
《结构与联合》 (2)ppt课件_第3页
《结构与联合》 (2)ppt课件_第4页
《结构与联合》 (2)ppt课件_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、Xuan shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学第七章第七章 构造与结合构造与结合构造类型二构造类型二Xuan shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学构造和结合的概念构造和结合的概念 在数据中,经常有一些既有联络,类型又不同的数据,它们又在数据中,经常有一些既有联络,类型又不同的数据,它们又需求一同处置。需求一同处置。如:学生根本档案的数据如:学生根本档案的数据 字段:字段: 学号学号 姓名姓名 性别性别 地址地址 分数分数类型:类型: long char char char float long char char char f

2、loat C言语允许用户按本人的需求将不同的根本类型构呵斥一种特言语允许用户按本人的需求将不同的根本类型构呵斥一种特殊类型,即构造和结合。殊类型,即构造和结合。构造和结合的操作分为三个步骤:构造和结合的操作分为三个步骤:根据需求定义构造或结合类型;根据需求定义构造或结合类型;经过定义的类型阐明变量、数组、指针;经过定义的类型阐明变量、数组、指针;援用变量、数组元素和指针指向的对象。援用变量、数组元素和指针指向的对象。Xuan shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学7.1 结结 构构 构造类型的定义构造类型的定义格式:格式: struct 构造名构造名 type

3、成员成员1 ; type 成员成员2 ; type 成员成员n ; ;构造标志。构造标志。用标识符命名的构造类型名。用标识符命名的构造类型名。 构造类型中所含构造类型中所含的成员项及其类型。的成员项及其类型。struct student long num ; char name20 ; int age ; char add30 ; float score ; ;构造的定义确定了如下两点:构造的定义确定了如下两点:定义构造类型,确定构造中的成员项的称号及类型。定义构造类型,确定构造中的成员项的称号及类型。 指明该构造类型的变量在内存中的组织方式。指明该构造类型的变量在内存中的组织方式。Xuan

4、shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学构造变量的阐明构造变量的阐明 定义构造只是确定该构造类型的称号及其成员项的组成及成员定义构造只是确定该构造类型的称号及其成员项的组成及成员项的类型。必需由定义的构造类型阐明构造变量,才开辟相应的内项的类型。必需由定义的构造类型阐明构造变量,才开辟相应的内存空间以供运用。存空间以供运用。构造变量的阐明方式:构造变量的阐明方式:定义后阐明定义后阐明 struct student long num ; char name20 ; int age ; char add30 ; float score ; ;struct studen

5、t wang,zhang,liu;用用struct student 类型阐明三个变量。类型阐明三个变量。定义构造类型时阐明变量定义构造类型时阐明变量 wang,zhang,liu;Xuan shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学无名构造方式阐明变量无名构造方式阐明变量struct long num ; char name20 ; int age ; char add30 ; float score ; wang,zhang,liu;阐明:阐明: 留意类型和变量的区别。留意类型和变量的区别。成员项可单独运用。成员项可单独运用。wang.age=20构造的成员项也可

6、以是构造变量。构造的成员项也可以是构造变量。struct doc char name20 ; struct birth age ; float sal ; ;struct birth int year; int mon; int day; ; 构造构造doc中的成中的成员项是一个员项是一个birth的的构造变量!构造变量! Xuan shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学构造变量的援用构造变量的援用 构造变量都是以成员项作为援用单位构造变量都是以成员项作为援用单位, ,援用方式:援用方式: 构造变量名构造变量名.成员项名成员项名wang.score=100;阐明

7、:阐明:构造变量的成员项与普通变量有一样的性质。构造变量的成员项与普通变量有一样的性质。构造体变量的初始化构造体变量的初始化构造变量可以在阐明时赋初值,称为初始化。构造变量可以在阐明时赋初值,称为初始化。static struct student long num ; char *name; char sex3 ; int age ; float score ; char addr 30 ; wang = 99010101 , “王五王五 , “男男 , 20 , 90.5 , “上海上海 ;Xuan shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学构造数组构造数组 构造

8、变量也可以构呵斥数组,称为构造数组。每个数组元素都构造变量也可以构呵斥数组,称为构造数组。每个数组元素都是一个构造变量,都含有构呵斥员项。它们在内存中的地址是延续是一个构造变量,都含有构呵斥员项。它们在内存中的地址是延续的。的。数组的阐明:数组的阐明: struct 构造名构造名 构造数组名构造数组名 常量表达式常量表达式 ;struct student long num ; char name20 ; float score ; stud3 ;阐明:阐明: 三个构造数组元素都含有三个构造数组元素都含有student 的成员项。的成员项。构造数组名构造数组名stud,代表构造数组的首地址。,代

9、表构造数组的首地址。 外部和静态构造数组在阐明时可以初始化。外部和静态构造数组在阐明时可以初始化。 =99010101 , “wang ,67.5 , 99010102 , “zhao ,78.5 , 99010103 , “fun , 98.5 ;Xuan shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学举例:统计三个候选人的票数。举例:统计三个候选人的票数。#include #define NUMBER 10struct student int num ; char name20 ; int count ; lead3 = 1 , “fun ,0 ,2 ,“tan ,

10、0 , 3 , “wang , 0 ;void main (void) int i ,j ,numb ; for (i=0 ; iNUMBER ; i+ ) scanf (“%d ,&numb ) ; if (numb0) leadnumb-1 .count + ; else printf(“Selection errorn); printf (“ n ) ;for (i=0 ; i成员项名成员项名构造指针主要用于对构造数组操作。构造指针主要用于对构造数组操作。struct studoc int iNum; char *name;*p,wang=2001,wang li;p=&wang;pri

11、ntf(“%d:%s,p-iNum,p-name;Xuan shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学举例:举例:#include struct sam int num ; char name20 ; char *addr; ws = 101 , “fun , “Shanghai , 102 , “tan , “Bejing , 103 , “wang , “Hefei ;void main ( void) int i; struct sam *pws ; pws = ws ; for ( i=0 ; inum , pws-name , pws-addr ) ; 定

12、义构造,阐明定义构造,阐明数组并初始化。数组并初始化。阐明构造指针。阐明构造指针。指针指向构造数组。指针指向构造数组。经过指针援用成经过指针援用成员项。员项。Xuan shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学构造与函数参数构造与函数参数 当函数需求经过形参传送一个构造时,普通有两种处置方法:当函数需求经过形参传送一个构造时,普通有两种处置方法: 传送一个构造指针效率高。传送一个构造指针效率高。#includevoid mprintp (struct student * ) ;struct student long num ;char *name ;float sc

13、ore; ; void main ( ) struct student s1 ; s1.num = 99010101 ; = “wang hai ; s1.score = 99 ; mprintp ( &s1 ) ; void mprintp ( struct student *sp ) printf(“%ldn%sn%5.1fn , sp-num , sp-name , sp-score ) ;指向构造的指针。指向构造的指针。传送一个构造变量效率低。传送一个构造变量效率低。 void mprintp (struct student ) ; s1struct student s

14、vsv.num, , sv.score 构造变量。构造变量。Xuan shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学前往构造变量的函数前往构造变量的函数 当函数的前往值为一个构造变量时,称该函数为一个构外型函当函数的前往值为一个构造变量时,称该函数为一个构外型函数。数。#includestruct stu long num ; char name10 ; float score ; ; struct stu sv(void);void main ( void) struct stu ws ; ws = sv ( ) ; printf (“%ldn%sn:%

15、fn , ws.num , , ws.score ) ;struct stu sv(void) struct stu stemp ; gets() scanf (“%ld,%f , &stemp.num, &stemp.score ) ; return ( stemp) ;Xuan shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学前往构造指针的函数前往构造指针的函数 当函数的前往值为一个构造指针时,称该函数为一个构造指针当函数的前往值为一个构造指针时,称该函数为一个构造指针型函数。型函数。#includestruct stu long

16、num ;char *name;float score ; sa = 99010101 , “fun , 89, 99010102 , “zhang , 99 , 99010103 , “wang ,78 , 0 , 0 , 0struct stu *findp (long) ;void main ( )long lsanum ; int i ; struct stu *sap ; printf (“Enter the number: ) ; scanf (“%ld , &lsanum ) ; sap = findp (lsanum ) ; if ( sap -num != NULL ) pr

17、intf (“%ld n %s n %f n , sap-num , sap-name ,sap-score) ; else printf ( “not found n ) ;struct stu *findp (long number ) int i ; for (i=0 ; sa i .num !=0 ; i+ ) if (sa i .num = number ) break ; return (&sa i ) ;Xuan shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学思索题思索题 知某班有知某班有6个人参与数学和物理竞赛的集训和课程考试,个人参与数学和物理竞赛的集

18、训和课程考试,求:求: 两门课程中的最高成果,及对应的姓名、学号和课程编号。两门课程中的最高成果,及对应的姓名、学号和课程编号。 课程课程1,2的平均成果,并求出两门课程都低于平均成果的学的平均成果,并求出两门课程都低于平均成果的学生姓名和学号。生姓名和学号。 对编号对编号1的课程从高到低排序。留意,其他成员项应坚持的课程从高到低排序。留意,其他成员项应坚持对应关系。对应关系。 阐明:要求定义构造,第一成员项为学生姓名,第二成员项为阐明:要求定义构造,第一成员项为学生姓名,第二成员项为学号,另外两个成员项为两门课成果。、要求分别用函数学号,另外两个成员项为两门课成果。、要求分别用函数完成。完成

19、。 检查某位同窗两门课程成果分别排第几名。检查某位同窗两门课程成果分别排第几名。Xuan shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学7.2 链链 表表 援用本身的构造和链表的概念援用本身的构造和链表的概念 构造中的某个成员项,为指向该构造类型本身的指针,那么称为构造中的某个成员项,为指向该构造类型本身的指针,那么称为援用本身的构造。援用本身的构造。 struct student int num ; float score ; char *name ; struct student *next ; ;指向本身的构造。指向本身的构造。一样类型的构造指针。一样类型的构造指

20、针。 链表是一种动态存储分配构造,经过指针相连,数据可以不连链表是一种动态存储分配构造,经过指针相连,数据可以不连续存放。续存放。head构造变量构造变量NULLXuan shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学链表链表head2000H2000H2400H2400HNULLtailXuan shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学内存分配函数内存分配函数 链表的操作需求开辟内存单元以便插入或追加节点,删除节点链表的操作需求开辟内存单元以便插入或追加节点,删除节点后需求释放节点占用的内存单元。后需求释放节点占用的内存单元。C 言语提供

21、了相应的函数。言语提供了相应的函数。malloc函数函数运用方法:运用方法: ptr=malloc(size);分配内存的字节数。分配内存的字节数。前往空类型的指针。前往空类型的指针。胜利:前往内存的地址。胜利:前往内存的地址。失败:前往失败:前往NULL。void *ptr;ptr=mallc(sizeof (int) )ptrvoid free(ptr) 作用:作用: 释放释放ptr指向的由指向的由malloc分配的内存空间。分配的内存空间。Xuan shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学链表的操作链表的操作建立链表建立链表步骤:步骤:定义援用本身的构造。定

22、义援用本身的构造。阐明指向构造的指针,阐明指向构造的指针,head(头指针头指针),tail(尾指针。尾指针。#iinclude #include struct slist char info ; struct slist *nextp ; ;void main ( void) struct slist *head , *tail , *find ; char c , d ; head=tail=(struct slist *) malloc (sizeof ( struct slist ) ; head-nextp = NULL ;InfonextpheadtailNULLwhile ( (

23、 c=getchar ( ) ) != n ) tail = append ( tail , c ) ;Xuan shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学在尾部追加节点在尾部追加节点步骤:步骤:为新节点分配内存。为新节点分配内存。建立新节点的成员项。建立新节点的成员项。建立链接关系。建立链接关系。struct slist *append(struct slist *ptr, char c) struct slist *p ; p=(struct slist *)malloc (sizeof(struct slist ) ; p-info=c ; p-nextp=N

24、ULL; ptr-nextp=p ; return (p) ;InfonextpheadtailNULLInfonextppNULLtail tail Xuan shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学删除节点函数删除节点函数infonextpinfonextpinfonextpvoid cdelete(struct slist *pcdel) struct slist *p ; p=pcdel-nextp ; pcdel-nextp=pcdel-nextp-nextp ; free (p ) ; p 思索题:思索题: 编写一个函数,在当前指针位置插入节点。编写一

25、个函数,在当前指针位置插入节点。Xuan shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学7.3 联联 合合(union) 概念:不同数据类型的集合;每个成员项共用一段内存空间;概念:不同数据类型的集合;每个成员项共用一段内存空间;某一时辰只能对一个某一时辰只能对一个“活的活的active成员项操作;成员项操作;结合类型的定义结合类型的定义 格式:格式:union 结合名结合名 type 成员项成员项 1 ; type 成员项成员项 2 ; type 成员项成员项 n ; ;union exam int a ; float b ; char c ; ;结合变量的阐明和援用

26、结合变量的阐明和援用可以用结合类型阐明:结合变量、结合数组、指向结合指针。可以用结合类型阐明:结合变量、结合数组、指向结合指针。union exam x , *px , y10 ;援用:援用变量的成员项。援用:援用变量的成员项。 经过变量援用:经过变量援用: 变量名变量名.成员项名成员项名经过指针援用:经过指针援用: 指针指针-成员项名成员项名Xuan shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学结合与构造的区别结合与构造的区别struct exam int a ; float b ; char c ; x ;xabcunion exam int a ; float

27、b ; char c ; x ;xb ac 构造变量的每个成员项有独立的内存单元,构造变量的每个成员项有独立的内存单元,而结合变量的成员项以最大的成员项开辟单元而结合变量的成员项以最大的成员项开辟单元后,一切成员项共用单元。后,一切成员项共用单元。sizeof (struct exam)Xuan shanli第七章第七章 结构与联合结构与联合合肥工业大学合肥工业大学举例:举例:#include void main (void) union exam int i ; char ch2 ; x ; x.i = 24897 ; printf (“i=%xHn , x.i); printf (“ch0=%xH,ch1=%xHn , x.ch0 , x.ch1 ); print

温馨提示

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

评论

0/150

提交评论