版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章指针(zhǐzhēn)与链表1第一页,共14页。分析在各种(ɡèzhǒnɡ)信息管理系统的程序设计中,常常需要存储大量的数据记录。如果使用结构体数组会带来哪些问题?2解决办法:采用(cǎiyòng)动态存储分配的数据结构——链表第二页,共14页。10.1存储空间的分配(fēnpèi)与释放C语言标准函数库stdlib.h中提供了四个函数,用于实现内存(nèicún)的动态分配和释放。分别为:malloc(),calloc(),realloc()和free().1.malloc函数void*malloc(unsignedintsize);作用是:在内存的动态存储区申请一个长度为size的连续空间,并返回存储空间的起始地址;如果(rúguǒ)没有足够的内存空间可分配,则返回空指针NULL.3第三页,共14页。用法:由于(yóuyú)函数返回类型为void,因此如果要将函数返回的指针赋给其它类型的指针变量,应当进行强制类型转换。例如(lìrú):int*p=(int*)malloc(sizeof(int));structstud*p=(structstud*)malloc(sizeof(structstud));4第四页,共14页。2.calloc函数(hánshù)
void*calloc(unsignedn,unsignedsize);作用是:在内存的动态区分配n个长度为size的连续空间,并返回该存储空间的起始地址。主要(zhǔyào)用于为动态数组申请存储空间。例如(lìrú):Int*p=(int*)calloc(10,sizeof(int));5第五页,共14页。3.free函数(hánshù)voidfree(void*p);作用是:释放指针(zhǐzhēn)变量p指向的存储空间.注意:p只能是程序中此前最后一次调用malloc或calloc函数所返回(fǎnhuí)的地址。例如:int*p,*q=(int*)calloc(10,sizeof(int));p=q;q++;free(p);6第六页,共14页。10.2链式存储(cúnchǔ)结构——链表链表可以动态的进行存储分配,每一个元素(yuánsù)称为一个“结点”,每个结点都包括两部分:1249head1249A13561356B14751475C10211021DNULLhead:头指针,存放一个地址(dìzhǐ),指向链表中的第一个结点.1.数据域:存储用户需要的实际数据;2.指针域:指向下一个结点的地址.表尾:它的地址部分放一个“NULL”,链表到此结束.7第七页,共14页。10.3单链表每个结点只含有(hányǒu)一个指针,所有结点单向联系,每个结点的指针都指向下一个结点,形成一条线性链。带头结点(jiédiǎn)的单向链表:在单向链表的第一个(yīɡè)结点前虚加一个(yīɡè)“头结点”,头指针head指向头结点,头结点的指针域指向第一个(yīɡè)结点,头结点的数据域不使用。8第八页,共14页。可用结构(jiégòu)体类型的变量来存储链表中的结点元素.1249head1249A13561356B14751475C10211021DNULL每一个结点(jiédiǎn)中存放地址的部分可用指针来实现.例:structstudent{intnum;floatscore;
structstudent*next;}1、建立(jiànlì)和输出链表9第九页,共14页。简单(jiǎndān)静态链表#defineNULL0structstudent{longnum;floatscore;structstudent*next;};main(){structstudenta,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);}anumscorenextbcheadp990189.5990390990585&a&b&cNULL&a&b&cNULL10第十页,共14页。建立(jiànlì)动态链表#defineNULL0#defineLENsizeof(structstudent)structstudent{longnum;floatscore;structstudent*next;};intn;动态(dòngtài)建立链表structstudent*creat(void){structstudent*head,*pEnd,*pNew;n=0;pEnd=pNew=(structstudent*)malloc(LEN);scanf(“%ld,%f”,&pNew->num,&pNew->score);head=NULL;while(pNew->num!=0){n=n+1;if(n==1)head=pNew;elsepEnd->next=pNew;pEnd=pNew;pNew=(structstudent*)malloc(LEN);scanf(“%ld,%f”,&pNew->num,&pNew->score);}pEnd->next=NULL;return(head);}11第十一页,共14页。链表的插入(chārù)操作3、单链表的插入(chārù)structstudent*insert(structstudent*head,structstudent*stud){structstudent*p1,*p2;p1=head;if(head==NULL){head=stud;stud->next=NULL;}else{while(p1->num>stud->num&&p1->next!=NULL)){p2=p1;p1=p1->next;}if(p1->next!=NULL){if(head==p1)head=stud;elsep2->next=stud;stud->next=p1;}else{p1->next=stud;stud->next=NULL;}}n=n+1;return(head);}12第十二页,共14页。链表的删除(shānchú)操作4、单链表的删除(shānchú)structstudent*del(structstudent*head,longnum){structstudent*p1,*p2;if(head==NULL){printf(“\nlistnull!\n”);exit(0);}p1=head;while(num!=p1->num&&p1->next!=NULL){p2=p1;p1=p1->next;}if(num==p1->num){if(p1==head)head=p1->next;elsep2->next=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年银川客运资格证考试答题
- 吉首大学《教学技能训练2》2021-2022学年第一学期期末试卷
- 吉首大学《传感器原理及应用》2021-2022学年第一学期期末试卷
- 《机床夹具设计》试卷25
- 吉林艺术学院《音乐创作软件基础》2021-2022学年第一学期期末试卷
- 吉林艺术学院《三维设计基础与应用》2021-2022学年第一学期期末试卷
- 2024年共同合作农产品协议书模板
- 2024年供货合同范本21篇范文
- 2024年大宗交易互赔协议书模板
- 吉林师范大学《新闻伦理与法规》2021-2022学年第一学期期末试卷
- 第四届全国供销合作总社职业技能竞赛(调饮师)备赛试题库(含答案)
- 用所给词的适当形式填空(专项训练)人教PEP版英语六年级上册
- 2024年中国远洋海运集团限公司招聘(高频重点提升专题训练)共500题附带答案详解
- DL∕T 1215.4-2013 链式静止同步补偿器 第4部分现场试验
- 2024(新高考2卷)英语试题详解解析 课件
- 续家谱跋的范文
- 2024彩票店转让合同范本
- 光缆迁改合同范本
- 仓储管理员劳动合同范本
- 维护维修方案标书(2篇)
- 预防及控制养老机构院内感染-院内感染基本知识
评论
0/150
提交评论