C语言程序设计 教学课件 ppt 作者 王玉 第九章结构体与共用体

上传人:E**** 文档编号:89388530 上传时间:2019-05-24 格式:PPT 页数:35 大小:171KB
返回 下载 相关 举报
C语言程序设计  教学课件 ppt 作者 王玉 第九章结构体与共用体_第1页
第1页 / 共35页
C语言程序设计  教学课件 ppt 作者 王玉 第九章结构体与共用体_第2页
第2页 / 共35页
C语言程序设计  教学课件 ppt 作者 王玉 第九章结构体与共用体_第3页
第3页 / 共35页
C语言程序设计  教学课件 ppt 作者 王玉 第九章结构体与共用体_第4页
第4页 / 共35页
C语言程序设计  教学课件 ppt 作者 王玉 第九章结构体与共用体_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《C语言程序设计 教学课件 ppt 作者 王玉 第九章结构体与共用体》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 王玉 第九章结构体与共用体(35页珍藏版)》请在金锄头文库上搜索。

1、C语言程序设计,1,第九章-结构体与共用体,C语言程序设计,2,结构体类型与结构体变量,struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student stu1,stu2;,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ; struct 结构体名 变量名表列;,C语言程序设计,3,结构体变量的引用和初始化,结构体变量不能整体引用,只能引用变量成员,引用方式:结构体变量名.成员名,可以将一个结构体变量赋值给另一个结构体变量,结构体嵌套时逐

2、级引用,C语言程序设计,4,C语言程序设计,5,结构体数组,struct student int num; char name20; char sex; int age; stu2;,C语言程序设计,6,例:统计后选人选票,struct person char name20; int count; leader3=“Li”,0,“Zhang”,0,”Wang“,0; main() int i,j; char leader_name20; for(i=1;i=10;i+) scanf(“%s“,leader_name); for(j=0;j3;j+) if(strcmp(leader_name,

3、leaderj.name)=0) leaderj.count+; for(i=0;i3;i+) printf(“%5s:%dn“,leaderi.name,leaderi.count); ,C语言程序设计,7,指向结构体数据类型的指针,定义形式:struct 结构体名 *结构体指针名; 引用方式:1、结构体名.成员名 2、(*p).成员名 3、p-成员名 几种运算: 1、 p-n 得到p指向的结构体变量中的成员n的值 2、 p-n+ 得到p指向的结构体变量中的成员n的值, 用完后使之加1 3、 +p-n 得到p指向的结构体变量中的成员n的值使之加1,C语言程序设计,8,指向结构体变量的指针,m

4、ain() struct student long int num; char name20; char sex; float score; stu_1,*p; p= ,C语言程序设计,9,指向结构体数组的指针,P加1指p所增加的值为结构体数组的一个元素所占的字节,struct student int num; char name20; stu2=10101,“Li Lin“,M,18, 10102,“Zhang li“,M,19; p=stu; p+;,C语言程序设计,10,struct student int num; char name20; char sex; int age; stu

5、3=10101,“Li Lin“,M,18, 10102,“Zhang li“,M,19, 10104,“Wang Min“,F,20; main() struct student *p; for(p=stu;pnum,p-name,p-sex,p-age); ,C语言程序设计,11,struct student int num; char name20; char sex; int age; stu= 10104,“Wang Min“,F,20; void print(struct student stu) printf(“%d %s%c %d ”,stu. num, stu. name,

6、stu.sex, stu.age) main() print(stu); ,用结构体变量作函数参数,C语言程序设计,12,用结构体指针变量作函数参数,struct student int num; char name20; char sex; int age; stu= 10104,“Wang Min“,F,20; void print(struct student *p) printf(“%d %s%c %d ”,stu. num, stu. name, stu.sex, stu.age) main() print(,C语言程序设计,13,(1)头指针变量head指向链表的首结点。 (2)每

7、个结点由2个域组成: 1)数据域存储结点本身的信息。 2)指针域指向后继结点的指针。 (3)尾结点的指针域置为“NULL(空)”,作为链表结束的标志。,链表的基本结构,C语言程序设计,14,链表,定义结点 struct node int num; struct node *next; ; 定义头指针 struct node *head; 三种访问结构体成员的方法,C语言程序设计,15,处理动态链表的函数,1、malloc函数 void *malloc(unsigned int size) 2、calloc函数 void *calloc(unsigned n, unsigned size) 3、

8、free函数 void * free(*p),C语言程序设计,16,链表的基本操作,建立单向链表 遍历单向链表 插入结点 删除结点,C语言程序设计,17,(1)创建链表是指,从无到有地建立起一个链表,即往空链表中依次插入若干结点,并保持结点之间的前驱和后继关系。 (2)遍历指按给定的结点索引号或检索条件,查找某个结点。如果找到指定的结点,则检索成功;否则,检索失败。 (3)插入指,在结点ki-1与ki之间插入一个新的结点k,使线性表的长度增1,且ki-1与ki的逻辑关系发生如下变化: 插入前,ki-1是ki的前驱,ki是ki-1的后继;插入后,新插入的结点k成为ki-1的后继、ki的前驱。 (

9、4)删除操作是指,删除结点ki,使线性表的长度减1,且ki-1、ki和ki+1之间的逻辑关系发生如下变化: 删除前,ki是ki+1的前驱、ki-1的后继;删除后,ki-1成为ki+1的前驱,ki+1成为ki-1的后继,C语言程序设计,18,建立单向链表,三个指针变量 head:头指针变量,指向链表的第一个结点,用作函数返回值。 P1:指向新申请的结点。 P2:指向链表的尾结点,用P2 -next= P1 ,实现将新申请的结点插入到链表尾,使之成为新的尾结点。,C语言程序设计,19,建立单向链表,建立头指针head 建立第一个结点p1 head=p1; P2指向前一个结点 建立第二个结点p1 P

10、2-next=p1; P2=p1; P2-next=NULL;,NULL,head,NULL,head,1,p1,1,head、p2,2,p1,1,head,2,p2,NULL,C语言程序设计,20,struct student *creat(void) struct student *head,*p1,*p2; n=0; p1=p2=(struct student *)malloc(LEN); scanf(“%ld %f “,C语言程序设计,21,遍历单向链表, P=head; if(head!=NULL) do p=p-next; while(p!=NULL); ,C语言程序设计,22,v

11、oid print(struct student *head) struct student *p; p=head; printf(“Number Scoren“); while(p!=NULL) printf(“ %ld %5d“,p-num,p-score); p=p-next; printf(“n“); ,C语言程序设计,23,插入结点,利用遍历的方法确定插入位置 P2为前一结点,p为要插入的结点 P-next=p2-next; P2-next=p;,1,p2,3,p1,2,p,1,p2,3,p1,2,p,C语言程序设计,24,三个指针变量 head:头指针变量 P0:指向要插入的结点。

12、 P1:指向当前结点。 P2:指向前一结点(即P1 原来指向的结点),C语言程序设计,25,四种情况: 1、空表 2、非空表,首节点之前 3、非空表,非首节点之前,非尾节点之后 4、非空表,尾节点之后,C语言程序设计,26,struct student *insert(struct student *head,struct student *stud) struct student *p0,*p1,*p2; p1=head; p0=stud; if(head=NULL) head=p0;p0-next=NULL; else while( (p0-num p1-num) ,C语言程序设计,27,

13、删除结点,利用遍历的方法确定要删除的结点p,p2为p的前一结点,即p2-next指向p P2-next=(p2-next)-next; free(p);,1,p2,3,p1,2,p,1,p2,3,p1,2,p,C语言程序设计,28,struct student *delete(struct student *head,long num) struct student *p1,*p2; p1=head; while(p1!=NULL) if(p1-num = num) if(p1 = head) head=p1-next; else p2-next=p1-next; free(p1); p2=p

14、1; p1=p1-next; return(head); ,C语言程序设计,29,struct link int data; struct link *next; a,b,c,*p,*q; 且变量a 和b 之间已有如图所示的链表结构 指针p 指向变量a,q 指向变量c. 则能够把c 插入到a 和b 之间并形成新的链表的语句组是 A) a.next=c; c.next=b; B)p.next=q; q.next=p.next; C)p-next=,C语言程序设计,30,struct STU char num10; float score3; main() struct STU s3=“20021

15、“,90,95,85, “20022“,95,80,75, “20023“, 100, 95,90,*p=s; int i; float sum=0; for(i=0;iscorei; printf(“%6.2fn“,sum); 程序运行后的输出结果是 D) 285.00 C) 280.00 B) 270.00 A) 260.00,C语言程序设计,31,ltab *insert(ltab *head, ltab *stud) ltab *p0, *p1, *p2; p1=head; p0=stud; while(p0-nop1-no),C语言程序设计,32,# includep36 void main() struct info int data; struct info *pn; info base, p; base=NULL; for(int i=0; idata=i+1; p-pn=base; base=p; p=base; while(p!=NULL) printf(“%2d“, p-data); p=p-pn; printf(“n“); 输出结果为:,C语言程序设计,33,设head是n

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号