- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
馋死 PPT研究院 POWERPOINT ACADEMY * * * * 第11讲 再述指针 (第6章.C精华篇) 指向结构体类型数据的指针 二级指针 main函数中的参数 指针再函数中的应用 指向结构体类型数据的指针 一、指向结构体类型变量的指针 [例] 打印通讯录。(excommu.c) 二、指向结构体数组的指针 [例]用结构指针建立一个图书检索系统。按书名检索。 (exsearch.c) 三、结构指针的使用 [例]链表。 链表的建立、遍历、查找、插入、删除操作。 链表 什么是链表? 线性表:有限个元素的有序集合。可用数组或链表表示。 数组和链表两 者都逻辑连续,但后者可以在空间不连续。 动态数据结构:其大小可变;动态分配存储空间。链表是最简单的一种,属于线性动态数据结构,树是非线性动态数据结构。 链表:链表中的一个元素称为一个结点或节点。每个结点由两部分组成:数据部分、指向上下结点的指针。靠这样的指针把各个结点串联起来构成链表。分单向、双向链表,后者可以两方向连接。 0 0 单向链表 双向链表 0 数据部分 链表 为什么使用链表? 1)不需要连续存储空间,可利用内存碎片; 2)插入删除元素不需移动其它元素,处理速度快; 3)动态分配存储空间,不必以最大可能长度预定存储空间,且可以随意扩充表的容量。 动态分配存储空间(使用函数) void *malloc(unsigned size)函数(memory allocation):在内存的动态存储区中分配一个长度为size的连续空间,size为结点元素各成员项的总字节数,可以用sizeof(数据类型名)运算符获得。该函数的返回值是一个指针,它的值是所分配存储区的起始地址,当该函数未成功执行时,返回值为0。 如: struct student { int num; float score; struct student *next;}*p1; p1=(struct student *)malloc(sizeof(struct student)); void free(ptr)函数:该函数释放由ptr指向的内存区。Ptr是最近一次调用calloc或malloc函数时返回的值。 用结构体及结构体指针构造链表和链表操作 (1)建立链表。链表的建立过程可以描述如下: 假设结构体定义如下: struct node { int num; float s; struct node *next; }; 1. 为了建立链表,在程序中需要使用两个指向结构的指针。例如:struct node *p1, *p2; 建立链表时,首先使用malloc函数为第一个元素分配存储空间,并把该空间的地址赋予p1,使p1指向该存储空间:p1=(struct node *)malloc(sizeof(struct node)); 2.把p1的值赋予p2,从而使p2也指向该存储空间,便于连接后面的结点元素。 3.通过p1访问成员num和s,并对其赋值: p1-num=1; scanf(“%f”,(*p1).s); 至此,链表中的第一个元素在内存中已建立,并且其数据部分已被赋值。 4. 建立链表的第二个元素时,再次使用malloc函数: p1=(struct node *)maloc(sizeof(struct node)); 这时p1指向第二个元素的存储空间,通过p1访问num和s: p1-num=2; scanf(“%f”,(*P).s); p1-next=p2; 从而第二个元素指向第一个元素,将两个元素链接在一起。最后调整指针为:p2=p1;使指针p2指向第二个(始终指向最后一个)元素。 反复执行上面的四个语句,就可以不断地把元素加入到链表中去。这种建立链表的方法是从表头插入的过程,指针p2总是指向最后出现的那个元素。 链表建立函数: # define NULL 0 /* 定义空指针,作为表尾结点的next域*/ struct node /* 结点元素的数据结构类型 */ { int num; struct node *next; }; int n=0; /* 定义外部变量n,用来记录结点的个数 */ struct node *creat() /*函数的返回值为指向头结点的指针*/ {
您可能关注的文档
- Access数据库技术与应用史国川黄剑ch12章节.ppt
- Access数据库应用教程第2版申莉莉ch1章节.ppt
- Access数据库应用教程第2版申莉莉ch2章节.ppt
- Access数据库应用教程第2版申莉莉ch3章节.ppt
- Access数据库应用教程第2版申莉莉ch4章节.ppt
- Access数据库应用教程第2版申莉莉ch5章节.ppt
- Access数据库应用教程第2版申莉莉ch6章节.ppt
- Access数据库应用教程第2版申莉莉ch7章节.ppt
- 博迪-金融学讲义-北大光华-第十课.ppt
- Access数据库应用教程第2版申莉莉ch8章节.ppt
- C_C程序设计教程王连相等第12讲复合数据类型4章节.ppt
- C_程序设计语言揣锦华第11章节VisualC_环境下Windows2章节.ppt
- C_服务管理对企业级应用的重要性.ppt
- C_语言程序设计清华大学郑莉2章节.ppt
- C_语言程序设计清华大学郑莉3章节.ppt
- C_语言程序设计清华大学郑莉4章节.ppt
- C_语言程序设计清华大学郑莉5章节.ppt
- C_语言程序设计清华大学郑莉6章节.ppt
- CorelDRAW设计与实训于晓平刘晓玲主编第1章节初步接触CorelDRAWX3第1章节初步接触CorelDRAWX3章节.ppt
- CorelDRAW设计与实训于晓平刘晓玲主编第11章节定制CorelDRAWX3第11章节定制CorelDRAWX3章节.ppt
文档评论(0)