ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:40.53KB ,
资源ID:7415324      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7415324.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(8结构体.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

8结构体.docx

1、8结构体第11章 结构体8.1 概述 数组 :子元素类型必须一致; 结构体:子元素类型一般不一致。8.1.1 结构体类型的定义 子元素称为域,可以是任何类型的数据,包括数组、指针、结构。 示例:简单的结构定义,理解结构类型的大小。struct student int code; char name10; float score; ;void main() struct student st1,st2; printf(%dd,sizeof(struct student); printf(%dd,sizeof(st1); 示例:嵌套的结构定义,理解结构类型的大小。struct date int y

2、ear, month, day; ;struct person char name10; struct date birth;void main() printf(%dd,sizeof(struct date) ); printf(%dd,sizeof(struct person) );8.1.2 类型的定义位置类型的定义位置类型的有效范围某函数内部某函数内部函数外部全文件示例:void main() struct student int code; char name10; float score; ; struct student st1,st2;void f() struct stude

3、nt st1,st2;struct student int code; char name10; float score; ;void main() struct student st1,st2;void f() struct student st1,st2;错误正确良好的编程风格: 将所有类型定义至于程序首部,以便所有函数共享。更良好的编程风格: 将所有类型保存为单独的*.h文件,使用#include以便更大范围的程序共享。Usertypes.hTest.cstruct student int code; char name10; float score; ;struct date int

4、year, month, day; ;struct person char name10; struct date birth;#include Usertypes.hvoid main() struct student st1,st2;void f() struct student st1,st2;8.1.3 结构体变量的定义在定义类型的同时,定义变量struct student . st1, st2;在定义了类型之后,定义变量struct student st1, st2; 利用typedef简化类型的书写:typedef struct student STUDENT;typedef st

5、ruct date DATE;typedef struct person PERSON;8.1.4 结构体变量示例:注意结构体变量的初始化方法;注意结构体变量中域值的操作方法。注意只有同类型的结构变量才可以相互赋值。#include Usertypes.hvoid main() STUDENT st1=1,XX,99,st2; DATE d1=1998,9,1; st2.code=2; st2.name=YY; st2.score=100; st1=st2; d1.year+; d1=st1; /* 语法错误 */ 示例:注意嵌套的结构变量的使用方法。void main() struct pe

6、rson p=XXX,2007,2,28; puts(p.name); p.birth.year=2008; p.birth.month=1; p.birth.day=31;8.2 结构体数组的应用8.2.1 结构体数组的初始化示例:注意结构数组的初始化方法;结构数组变量的使用方法。#include Usertypes.hvoid main() STUDENT sts3=1,AA,66,2,BB,77; sts2.code=3; sts2.name=CC; /* 错在哪里? */ sts2.score= sts0.score + sts1.score;8.2.2 结构体数组的输入/输出#inc

7、lude Usertypes.hvoid main() STUDENT sts3; int i; for(i=0; i3; i+) scanf(%d, &stsi.code); scanf(%s, stsi.name); scanf(%f, &stsi.score); for(i=0; i3; i+) printf(%d, stsi.code); printf(%s, stsi.name); printf(%f, stsi.score); 改进版本:void Input(STUDENT sts,int n);void Output(STUDENT sts,int n);void main()

8、STUDENT sts3; Input(sts,3); Ouput(sts,3);void Input(STUDENT sts,int n) int i; for(i=0; in; i+) scanf(%d, &stsi.code); scanf(%s, stsi.name); scanf(%f, &stsi.score); void Output(STUDENT sts,int n) int i; for(i=0; in; i+) printf(%d, stsi.code); printf(%s, stsi.name); printf(%f, stsi.score); 8.2.3 结构体数组

9、的查找int search(STUDENT s,int n,char name)void main() STUDENT sts3=1,w1,66,2,w2,77,3,w3,88; int i = search(sts, 3, w2); if(i!=-1) printf(%dn,stsi.score); else printf(NoFind!); int search(STUDENT s,int n,char name) int i; for(i=0; in; i+) if(strcmp(si.name,name)=0) return(i); return(-1);8.2.3 结构体数组的排序v

10、oid BubbleSort(STUDENT s,int n);void main() STUDENT sts4=1,w1,99,2,w2,77, 3,w3,66,2,w4,88,; BubbleSort(sts, 4); Output(sts, 4);void BubbleSort(STUDENT sts,int n) int i,j; STUDENT tmp; for(i=1; i=i; j-) if(stsj-1.score stsj.score) tmp=xj-1; xj-1=xj; xj=tmp; 8.3 指向结构体的指针 STUDENT * p;8.3.1 用结构指针遍历结构数组示

11、例:输出结构数组所有数据。void main() STUDENT sts3=1,w1,66,2,w2,77,3,w3,88; for(p=sts; ps+N; p+) printf(%d,%fn,(*p).code,(*p).score); for(p=sts; pcode,p-score); 8.3.2 用结构指针作为函数参数示例:用结构变量作为函数参数,观察“单向值传递”的效果。void f(STUDENT s);void main() STUDENT st1=1,AAA,75.5; f(st1);void f(STUDENT s) s.score+=20; strcpy(s.name,b

12、bb);示例:用结构变量的指针作为函数参数,实现“双向传递”的效果。void f(STUDENT *s);void main() STUDENT st1=1,AAA,75.5; f(&st1);void f(STUDENT *s) s-score+=20; strcpy(s-name,bbb);8.4 用指针处理链表8.4.1 链表概述数据集合中,每个元素除存储自身信息外,还需存储其后继元素的信息。结点(数据域,指针域): 链表的逻辑结构图:链表的存储示意图:链表的标识:头指针(head)8.4.2 最简单链表:将3个结点串成一个链表 仔细观察链表的内存结构、逻辑结构。struct node

13、int data; struct node *next;typedef struct node NODE;void main() NODE st1,st2,st3,*head; st1.data=10; st2.data=10; st3.data=10; head=&st1; st1.next=&st2; st2.next=&st3; st3.next=NULL; print(head);void print(NODE *head) NODE *p; for(p=head; p!=NULL; p=p-next) printf(%dn,p-data);8.4.3 申请/释放空间的函数申请空间NO

14、DE *p;p=(NODE *)malloc(sizeof(NODE);释放空间free(p);8.4.4 建立动态链表NODE * Create();void Print(NODE *head);void main() NODE *head=Create(); Print(head);NODE * Create(); NODE *head=NULL, *newp, *lastp; while(1) newp=(NODE *)malloc(sizeof(NODE); scanf(%d,&new-data); if(newp-data=-1) break; if(head=NULL) head=

15、lastp=newp; else lastp-next=newp; lastp=newp; lastp-next=NULL; return(head);8.4.5 查找结点NODE *Search(NODE *head, int data) NODE *p; for(p=head; p!=NULL; p=p-next) if(p-data=data) return(p); return(NULL);8.4.6 删除结点 删除值为data的结点。NODE *Delete(NODE *head, int data) NODE *p, *prev; if(head=NULL) return(NULL

16、); if(head-data=data) p=head; head=head-next; free(p); return(head); for(prev=head,p=head-next; p; prev=p,p=p-next) if(p-data=data) break; if(p) prev-next=p; free(p); return(head);8.4.7 插入结点 在链表首结点之前,插入新结点。NODE *Insert(NODE *head, int data) NODE *newp; newp=(NODE *)malloc(sizeof(NODE); newp-data=data; if(head=NULL) newp-next=NULL; return(newp); newp-next=head-next; head-next=newp; return(head);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1