网站大量收购独家精品文档,联系QQ:2885784924

指针与链表讲述.ppt

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第10章 指针与链表 * 分 析 在各种信息管理系统的程序设计中,常常需要存储大量的数据记录。 如果使用结构体数组会带来哪些问题? * 解决办法: 采用动态存储分配的数据结构——链表 10.1 存储空间的分配与释放 C语言标准函数库stdlib.h中提供了四个函数,用于实现内存的动态分配和释放。 分别为:malloc(),calloc(),realloc()和free(). 1. malloc 函数 void *malloc (unsigned int size); 作用是: 在内存的动态存储区申请一个长度为size的连续空间,并返回存储空间的起始地址;如果没有足够的内存空间可分配,则返回空指针NULL. * 用法:由于函数返回类型为void,因此如果要将函数返回的指针赋给其它类型的指针变量,应当进行强制类型转换。 例如: int *p=(int *)malloc(sizeof(int)); struct stud *p=(struct stud *)malloc(sizeof(struct stud)); * 2.calloc函数 void *calloc(unsigned n,unsigned size); 作用是: 在内存的动态区分配n个长度为size的连续空间, 并返回该存储空间的起始地址。 主要用于为动态数组申请存储空间。 例如: Int *p=(int *)calloc(10,sizeof(int)); * 3. free函数 void free(void *p); 作用是: 释放指针变量p指向的存储空间. 注意:p只能是程序中此前最后一次调用malloc或 calloc函数所返回的地址。 例如:int *p,*q=(int *)calloc(10,sizeof(int)); p=q; q++; free(p); * 10.2 链式存储结构——链表 链表可以动态的进行存储分配,每一个元素称为一个“结点”,每个结点都包括两部分: 1249 head 1249 A 1356 1356 B 1475 1475 C 1021 1021 D NULL head: 头指针,存放一个地址,指向链表中的第一个结点. 1.数据域:存储用户需要的实际数据; 2.指针域:指向下一个结点的地址. 表尾: 它的地址部分放一个“NULL”,链表到此结束. * 10.3 单链表 每个结点只含有一个指针,所有结点单向联系,每个结点的指针都指向下一个结点,形成一条线性链。 带头结点的单向链表: 在单向链表的第一个结点前虚加一个“头结点”,头指针head指向头结点,头结点的指针域指向第一个结点,头结点的数据域不使用。 * 可用结构体类型的变量来存储链表中的结点元素. 1249 head 1249 A 1356 1356 B 1475 1475 C 1021 1021 D NULL 每一个结点中存放地址的部分可用指针来实现. 例: struct student { int num; float score; struct student *next; } 1、建立和输出链表 * 简单静态链表 # define NULL 0 struct student { long num; float score; struct student *next; }; main( ) { struct student a,b,c,*head,*p; a.num=9901; a.score=89.5; b.num=9903; b.score=90; c.num=9905; c.score=85; head=a; a.next=b; b.next=c; c.next=NULL; p=head; do { printf(“%ld %5.2f \n”,p-num,p-score); p=p-next; }while(p!=NULL); } a num score next b c head p 9901 89.5 9903 90 9905 85 a b c NULL a b c NULL * 建立动态链表 #define NULL 0 #define LEN sizeof(struct student) struct student {long num; float score; struct s

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档