欢迎来到天天文库
浏览记录
ID:50350901
大小:777.50 KB
页数:23页
时间:2020-03-08
《C语言程序设计 教学课件 作者 孙淑霞 罗奕主编 C语言程序设计(09763)第十章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C语言程序设计孙淑霞罗奕主编第十章结构体与共用体10.1结构体类型10.1.1结构体类型和结构体变量1.结构体类型的定义struct结构体类型名{数据类型名1结构成员名表1;数据类型名2结构成员名表2;…数据类型名n结构成员名表n;};定义结构体的注意事项:①“}”后面的分号不能省略。②同一个成员名表中的成员数据类型相同,成员名之间用逗号隔开。③成员数据类型可以是C语言的任何数据类型,当然也可以是结构体类型。④结构体类型的定义一般写在主程序的外部,即main()函数之前。⑤只有定义了结构体变量后,C编译程序才为构成结构的各变量分配内存空间。2.结构体变量的定义结构体类型变量简
2、称为结构体变量,结构体变量的定义可以采用如下3种形式:(1)先定义结构体类型,再定义结构体类型变量struct结构体名{类型名1结构成员名表1;类型名2结构成员名表2;…类型名n结构成员名表n;};sturct结构体名变量名1,变量名2,……,变量名n;(2)在定义结构体类型的同时定义结构体类型变量struct结构体名{类型名1结构成员名表1;类型名2结构成员名表2;…类型名n结构成员名表n;}变量名1,变量名2,…,变量名n;(3)直接定义结构体类型变量struct{类型名1结构成员名表1;类型名2结构成员名表2;…类型名n结构成员名表n;}变量名;3.结构体变量的初始化(
3、1)一般结构体变量的初始化(2)带有嵌套结构体的结构体变量的初始化4.结构体变量的使用对结构体变量的使用是以结构成员的引用为前提的。引用的方法为:结构体变量名.结构成员名使用结构体类型变量的注意事项:①只能对结构体类型变量的各个成员分别引用,不能将结构体变量作为一个整体引用。②结构体类型变量的成员可以像基本类型变量一样进行相应的运算。10.1.2结构数组结构数组就是结构体类型的一组数据,它的定义和使用的方法与基本类型的数组相似。结构数组的一般定义方式为:struct结构体类型名结构数组名[元素个数]例如,定义一个student结构体类型的数组s,s有20个元素。方法如下:st
4、ructstudent{charname[20];charsex[7];charnum[10];};structstudents[20];或structstudent{charname[20];charsex[7];charnum[10];}s[20];10.1.3结构指针结构指针就是指向结构体变量的指针,换句话说结构体指针就是已经定义的结构体变量(或数组)所占内存单元的起始地址。结构指针的一般定义方式为:struct结构体类型名*结构指针名通过指针变量访问结构体成员有两种方法:(*指针变量名).结构成员名或指针变量名->结构成员名10.1.4结构指针的典型应用——链表1.链
5、表的定义链表是一种动态存储的数据结构,可以处理大量同类数据。构成链表的基本元素称为结点。每一个结点都有两个逻辑上的存储单元(不一定是一个字节),分别称为数据项和指针项。数据项存放该节点的数据,一个结点可以有不止一个数据项,如图所示。指针项存放下一个(或上一个)结点的地址,又称为链指针,各个结点通过链指针首尾相连成为链表。一个结点可以有两个链指针,分别指向前一结点和后一结点,下面将要介绍的双向链表就是这种情况。数据项1数据项2…数据项n指针项2.链表的类型(1)单向链表如果链表的每个结点(除最后一个结点)只有一个指针项指向下一个结点,则该链表称为单向链表。(2)双向链表如果链表
6、的每个结点(除了第1个和最后一个)有两个指针项,分别指向前一结点和后一结点,则该链表又称为双向链表。(3)循环链表如果链表的每个结点有一个指针指向下一个结点,并且最后一个结点的指针指向第1个结点,则该链表又称为循环链表。循环链表又分为单向循环链表和双向循环链表。3.单向链表的建立、插入和删除(1)建立链表建立链表的过程就是设置各结点的数据项和指针项的过程。数据项的值可以由用户输入,指针项的值是下一个结点的地址。(2)插入新结点当要向链表中插入结点时,首先要向系统申请存储空间,然后将数据项插入到链表中。插入结点的示意图。(a)插入前(b)插入后插入前,p指针指向已知链表的第i个
7、结点,s指针指向待插结点。插入的方法为:s->next=p->next;/*图中①的连接使s的next指针指向第i+1个结点*/p->next=s;/*图中②的连接使p的next指针指向待插结点*/这两条语句顺序不能改变。否则,将语句②写在语句①之前会造成链表“断裂”,第i个结点以后的结点丢失。(3)删除结点对链表中不再需要的结点,可以从链表中删除并释放其所占的空间。删除前,p指针指向待删结点i,q指针指向待删结点i的前一结点i-1。删除的方法:q->next=p->next;10.1.5结构与函数1.
此文档下载收益归作者所有