- 1、本文档共48页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
清华大学_C课程_第12讲结构体_236807699
12.1结构体类型说明及变量定义 12.1结构体类型说明及变量定义 §12.5 结构体指针 12.6 结构体类型数据作函数参数 第11次试验要求 1.上机编程完成教材P227 第1,2,3,4和5题 2.设students是一个stud类型的结构数组,其元素的个数由初值确定。Students的说明和初始化在″stud.h″头文件中。写一个程序输入每个学生的成绩,然后将每个学生按成绩高低排队,成绩高的排在前面。最后输出按成绩排队的学生情况登记表。要求参考课件中分别编写readscores(struct stud *stab, unsigned numbers), void sortbyscore(struct stud *stab, unsigned numbers)等函数来实现。 例:跳马。依下图将每一步跳马之后的位置(x,y)放到一个“结点”里,再用“链子穿起来”,形成一条链,相邻两结点间用一个指针将两者连到一起。 12.7* 链表 依上图有7个结点 (x1,y1) (x2,y2) (x6,y6) (x7,y7) 为了表示这种既有数据又有指针的情况,引入链表这种数据类型。 例如跳马棋局可如下定义 struct TM { int x; int y; // 结构TM的成员,x,y为整数型 struct TM *next // 结构TM的成员,属TM型 } 下面的表是马的跳步方案,从左下角跳到右上角 结点 n1 n2 n3 n4 n5 n6 n7 x y 0 0 1 2 2 4 4 3 6 4 7 2 8 4 8 4 NULL NULL为空地址 2 4 n4 1 2 n3 0 0 n2 n1 head 12.7* 链表 链表特征: 1、有一个“头指针”head,它指向链表的第一个元素。 2、链表的一个元素称为一个“结点”(node)。结点中包含两部分内容,数据域和指针域。其中数据域是存放节点的数据,指针域指向下一个节点的地址。 3、最后一个结点称为“表尾”,表尾结点的指针为空(NULL) 提问:结构体数组和链表的区别? 12.7* 链表 链表需要动态地进行存储分配,C语言内存管理函数: 1、void * malloc(size_t size)在动态存储区分配长度为size的连续空间,并返回指向该空间起始地址的指针。若分配失败(系统不能提供所需内存),则返回NULL。 2、void * calloc(size_t n, size_t size)在动态存储区分配n个长度为size的连续空间,并返回指向该空间起始地址的指针。若分配失败,则返回NULL。 3、void free(void * ptr)释放ptr指向的内存空间。ptr是malloc()或calloc()函数返回的值。 注意: (1)上述函数的原型在alloc.h和stdlib.h中定义。在程序中必须包含这两个头文件。 (2)size_t是专用于描述内存大小和计数值的数据类型, 等于unsigned int。 12.7* 链表 建立链表 [例] 写一个函数creat(),建立一个有5个学生的单向链表。分析建立过程: 设:链表结构为: struct student { long num; float score; struct student *next;}; 当输入的num等于零时,表示建立过程结束。 定义以下变量: struct student *head; /* 表头 */ struct student *p1; /* 新建结点 */ struct student *p2; /* 表尾结点 */ 12.7* 链表 12.7* 链表 12.7* 链表 12.7* 链表 12.7* 链表 #include stdio.h#include alloc.h#include stdlib.h struct student{ long num; float score; struct student *next;}; #define LEN sizeof(struct student) /* 注意,#define NULL 0不需要,NULL已在stdio.h中定义 */ int n; struct student * creat() /* 创建链表,并返回表头指针 */{ struct student *head; /* 表头 */ struct student *p1; /* 新建结点 */ struct student *p2; /* 表尾结点 */ n = 0; /* 结点数为0 */ head = NULL; /* 还没有任何结点,表头
文档评论(0)