- 1、本文档共105页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
struct student { int num; char name[20]; char sex; int age; float score[5]; char addr [30]; } stu1, stu2; 例1 用FILO (栈式)的方式建立5名学生数据的带头结点的单链表,每个学生的数据包括学号和成绩。 一 指向结构体变量的指针 示例 首先定义结构体类型: struct student { long int num; char name[20]; char sex; float score; }; 然后定义student结构体类型的变量和指向该类型变量的指针: struct student stu_1; struct student *p=stu_1; 1.4.10 指向结构体的指针 这里的指针变量p称为指向结构体类型变量stu_1的指针。 于是访问结构体变量stu_1中的域就有以下几种不同的方法。例如: stu_1.num= 等价于以下指针表示法: (*p).num= 注意,这里的括号不可以省略。指针表示法通常写成: p-num= 一、概述 结构体变量中的成员也可以是指向其它同类型结构体变量的指针,从而构成“链表”。链表是常用的数据结构,操作系统中用来动态分配和回收内存,管理堆栈和队列等资源。 head 1249 1356 1475 1021 头结点 A B C D 1249 1356 1475 1021 ^ 图.1 1.4.11 链表 链表中的元素称为结点。链表中结点的地址可以不连续,也不要求递增。每个结点应包括两个部分: 1 用户需要用的实际数据; 2 下一个结点的地址。 struct student { int num; char name[20]; struct student *next; /*递归定义*/ } 建立链表首先要定义结构体类型,例如: 1. malloc(size):分配size个字节的连续单元并返回首地址, 返回0表示内存空间不够, 分配失败。 2. calloc(n,size):分配size*n个字节的连续单元并返回首地址, 返回0表示内存空间不够,分配失败。 3. free(ptr):释放内存。ptr为最近一次调用函数malloc或calloc的返回值。 域next中可存放其结点的地址从而构成链条。图1所示链表中各结点的地址并无规律,系统是怎么给结点分配地址的呢?有库函数可供使用: 建立链表是指一个一个地建立结点,输入相应的数据, 并用指针将各结点连接起来, 组成图1所示的链条, 称为链表。 二、建立链表 方法:设两个指针变量p1,p2。 令p1指向新建立的结点,p2指向链表中的最后一个结点。则 “p2-next=p1” 将p1所指向的结点连接在p2所指的结点之后,即将p1所指向的结点插在链表的末尾。(算法见图2) #define NULL 0 #define ST struct student /*以后要用*/ #define LEN sizeof (ST) main ( ) { ST *create( ); ST *head; head=(ST *) malloc(LEN); head-next=NULL; create(head); } ST *create(ST *head) { ST *p; int no; float sc; head=(ST *)malloc(LEN); head-next=NULL; do { scanf(“%d%f”,no,sc); if (no==0) return(head); p=(ST *)malloc(LEN); if (!p) return head; p-num=no; p-score=sc; p-next=head-next; head-next=p; }
文档评论(0)