C程序设计课件第07章.ppt
《C程序设计课件第07章.ppt》由会员分享,可在线阅读,更多相关《C程序设计课件第07章.ppt(68页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第第第7 7章章章章 结构体结构体结构体结构体n结构体由许多组织在一起的数据项组成,这些数据项不需要属于同一类型n结构体可以容纳需要的任意多数据项n结构体中的变量称为结构体元素或结构体成员struct studentcharname11;intgrade;intnumber;姓名姓名年级年级学号学号学生学生声明结构体变量n一旦定义了结构体,就可以声明一个或多个该类型的变量n示例:struct student h1;n这条语句将会预留足够的内存来存放该结构体中的所有项struct studentcharname11;intgrade;intnumber;h1,h2;struct student
2、 h1;struct student h2;struct student h3,h4;定义时定义时,声明结构体变量声明结构体变量先定义先定义,后声明后声明 结构体类型与结构变量的最大区别在于:结构变量占有一定的内存空间,而结构体类型只是一种数据类型的结构描述,并不占用内存空间。struct box float length;float width;float height;它表明struct box结构体类型由大括号中所列的一些数据项组成,共需占用4x3=12个字节。在此之后,若进行结构变量的定义如:struct box box1;表明box1为struct box结构体类型变量,它占用了12
3、个字节的内存单元。初始化结构体nstudent 类型的变量 h1 和 h2 可以按照下面的方式进行声明和初始化:struct student h1=“张三张三”,3,20050101;struct student h2=“李四李四”,3,20050102;struct studentcharname11;intgrade;intnumber;结构体中使用的赋值语句n可以使用一条简单的赋值语句将一个结构体变量的值赋给另一个相同类型的结构体变量n例如,如果 h1 和 h2 是同一类型的结构体变量,那么下列语句是有效的:h2=h1;访问结构体元素n结构体元素通过使用点运算符(.)来引用,这个运算符也
4、称为成员运算符n语法:结构体变量名.元素名n示例:cin h1.name;n#include nvoid main()nnstruct studentnnchar name10;nint chinese;nint english;nscore;ncoutscore.name;ncoutscore.chinese;ncoutscore.english;n /为结构体元素赋值为结构体元素赋值ncout姓名:score.nameendl;ncout语文:score.chineseendl;ncout英语:score.englishendl;n/输出结构体元素结构体范例结构体范例结构体数组n首先定义结
5、构体,然后声明该类型的数据变量n示例:struct student stu5;n访问数组 stu的第三个元素中的变量 number:stu2.number结构体数组的初始化n结构体数组是通过用一对大括号将其元素值列表括起来进行初始化的n示例:struct student stu3=“张三张三”,3,20050101,“李四李四”,3,20050102,“赵飞赵飞”,3,20050103【例】计算学生的平均成绩并统计出不及格的人数。#include struct stu int num;char name20;char sex;float score;student3=200001,Li li,
6、W,99,200002,Wang hai,M,85,200003,Liu ying,W,50;void main()int i,n;float average,sum;n=0;sum=0;for(i=0;i3;i+)sum+=studenti.score;if(studenti.score60)n+=1;coutsumendl;average=sum/3;coutaverageendln 运算符用于通过指针来访问结构体的元素n示例:struct student*p,h1;p=&h1;coutname;这三种用于表示结构成员的形式是完全等效的。结构变量.成员名 (*结构指针变量).成员名 结构指
7、针变量-成员名 请注意分析下面几种运算:s-n 得到s指向的结构变量中的成员n的值 s-n+得到s指向的结构变量中的成员n的值,用完该值后使 它加1 +s-n 得到s指向的结构变量中的成员n的值使之加1【例】通过结构指针引用结构体成员。#include iostream.hstruct stu int num;char name20;char sex;float score;student1=102,Zhang ping,M,78.5,*s;void main()s=&student1;/*给结构指针变量赋值*/coutstudent1.numstudent1.nameendl;cout(*s
8、).num(*s).nameendl;coutnumnameendl;指向结构数组指向结构数组指向结构数组指向结构数组 当结构指针指向一个结构数组时,该指针变量的值是整个结构数组的首地址。【例】用指针变量输出结构数组。#include iostream.hstruct stu long int num;char name20;char sex;float score;student3=200001,Li li,W,99,200002,Wang hai,M,85,200003,Liuying,W,50;void main()struct stu*s;for(s=student;sstudent+
9、3;s+)coutnumnameendl;结构指针作函数参数结构指针作函数参数结构指针作函数参数结构指针作函数参数 使用结构指针,即用指向结构变量(或数组)的结构指针作函数参数进行传送,这时由实参向形参传递的是地址,属于“地址传递”方式,减少了时间和空间上的开销。【例】用结构指针变量作函数参数编程,计算一组学生的平均成绩【例】用结构指针变量作函数参数编程,计算一组学生的平均成绩#include iostream.hstruct stu long int num;char name20;char sex;float score;student3=200001,Li li,W,99,200002,
10、Wang hai,M,85,200003,Liuying,W,50;void average(struct stu*ps)int n=0,i;float ave,s=0;for(i=0;iscore;ave=s/3;coutaverage=avenum=102;strcpy(s-name,Zhang ping);s-sex=M;s-score=62.5;coutnumnameendl;coutsexscoreendl;free(s);链表的使用链表的使用链表的使用链表的使用 链表是一种常见的、重要的数据结构,它采用动态的分配办法为一个结构体分配内存空间。一方面需要时就分配一块空间用来存放,从而
11、节约了宝贵的内存资源;且便于删除与加入。另一方面,在动态分配时,每个结点之间可以是不连续的(结点内是连续的),结点之间的联系是通过指针来实现的,即在结点结构中定义一个成员项用来存放下一结点的首地址,这个用于存放地址的成员,常把它称为指针域。这样一种连接方式,如同一条一环接一环的链子,在数据结构中称之为“链表”。struct stustruct stu int num;int num;int score;int score;struct stu*next;struct stu*next;在该结构体中前两个成员项组成数据域,最后一个成员项在该结构体中前两个成员项组成数据域,最后一个成员项nextn
12、ext构构成指针域,它是一个指向成指针域,它是一个指向struct stustruct stu类型的结构指针变量。类型的结构指针变量。单链表的常用操作:结点的插入、删除、检索和排序等。单链表的常用操作:结点的插入、删除、检索和排序等。新项目插在表头新项目插在表头新项目插在表中间新项目插在表中间新项目新项目infoinfo1 1infoinfo3 30infoinfo2 2新项目插在表尾新项目插在表尾新项目新项目infoinfo1 1infoinfo3 30infoinfo2 2新项目新项目infoinfo1 1infoinfo3 30infoinfo2 2新项目新项目0infoinfo1 1i
13、nfoinfo3 3infoinfo2 2 建立链表建立链表建立链表建立链表【例】编写一个建立单向链表的函数,存放学生数据。#include#include#include malloc.h#include malloc.h#define NULL 0#define NULL 0 /*/*令令NULLNULL为为0 0,用它表示空地址,用它表示空地址*/*/#define LEN sizeof(struct stu)#define LEN sizeof(struct stu)struct stustruct stu long int num;long int num;float score;f
14、loat score;struct stu*next;struct stu*next;int n;int n;struct stu*creat()struct stu*creat()/*/*此函数返回一个指向链表头的指针此函数返回一个指向链表头的指针*/*/struct stu*head,*p1,*p2;struct stu*head,*p1,*p2;n=0;n=0;/*n/*n为结点的个数为结点的个数*/*/p1=p2=(struct stu*)malloc(LEN);p1=p2=(struct stu*)malloc(LEN);/*/*开辟一个新单元开辟一个新单元*/*/cinp1-num
15、p1-score;cinp1-nump1-score;head=NULL;head=NULL;while(p1-num!=0)while(p1-num!=0)n=n+1;n=n+1;if(n=1)head=p1;if(n=1)head=p1;else p2-next=p1;else p2-next=p1;p2=p1;p2=p1;p1=(struct stu*)malloc(LEN);p1=(struct stu*)malloc(LEN);cinp1-nump1-score;cinp1-nump1-score;p2-next=NULL;p2-next=NULL;return(head);retu
16、rn(head);/*/*返回链表的头地址返回链表的头地址*/*/图7-1、图7-2、图7-3、图7-4、图7-5表示出creat函数的执行过程。图7-1图7-2图7-3(a)图7-3(b)图7-3(c)图7-4(a)图7-4(b)图7-4(c)图7-5链表的输出链表的输出链表的输出链表的输出将链表中各结点的数据依次输出,首先要知道链表头元素的地址。将链表中各结点的数据依次输出,首先要知道链表头元素的地址。程序执行过程可见程序执行过程可见图图7-67-6所示。所示。【例】写一个函数,输出链表中所有结点。【例】写一个函数,输出链表中所有结点。void print(head)void print(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 课件 07
限制150内