- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
链表讲稿
7.6链表
一、动态内存分配
先提出一个问题:怎样存储数量比较多的同类型或同结构的数据?利用我们以前学过的知识,当然是采用数组。例如,存储某个班若干名位同学的C语言程序设计课程的分数,需要定义一个float型的数组:
float score[45];
那么,如果另一个班的同学是50位,那么就需要修改程序中数组的大小。因此,在使用数组的时候,总是有一个问题困扰着我们:对于一个问题,数组到底该定义多大?
在很多时候,我们不知道要定义多大的数组,比如,我们可能不知道某个班学生的人数,因此,我们总是把数组定义的足够大。这样,我们的程序在运行时就申请了固定大小的内存空间。如果因为某种原因,该班级人数增加或者减少,我们就必须去修改程序,扩大数组的空间。这种分配固定大小的内存分配方法称为静态内存分配,这种内存分配方法存在着浪费内存空间,引起下标越界错误等严重缺陷。
那么,能不能我们需要多大空间,就分配多大空间呢?可以!C语言中采用的机制就是动态内存分配。
所谓动态内存分配,就是在程序的执行过程中根据需要动态地分配内存空间或者回收存储空间的方法。它的特点是不需要预先分配空间,分配的空间可以根据程序的需要扩大或者缩小。
二、动态内存分配的实现
在C语言程序设计中,要实现动态内存分配,就需要掌握以下几个函数。
malloc()函数
malloc() 函数的原型为:
void *malloc(unsigned int size);
该函数的功能是在系统内存的动态存储区中分配一个大小为size的连续存储空间,并返回该空间的起始地址的指针。由于是void* ,所以分配好后要在前面加上你需要用的类型,如
?????? * p =?(int*)?malloc(256*sizeof(int));
如果不能成功分配空间(如内存不足),则返回一个空指针(NULL)。因此,在调用该函数时,应该检测该函数的返回值是否为NULL,如果为NULL,则输出相关信息,并退出程序;否则,才能进行后面的相关的操作。
calloc()函数
calloc()函数的原型为:
void*calloc(unsigned int n,unsigned int size);
该函数的功能是在系统内存的动态存储区中分配n个大小为size的连续存储空间,并返回一个指向该空间的起始地址的指针。同样地,分配好内存后也需要进行强制类型转换。如果分配不成功,则返回NULL。同样的道理,在调用该函数时,也需要检测该函数的返回值。
free()函数
计算机的内存是有限的,不能无限制地分配下去,而且,一个程序要尽量节省资源,不能浪费内存。当所分配的内存区域不用时,就要及时释放,以便其它的变量或者程序使用。这就要用到free函数。
该函数的原型为:
void free(void *p)
该函数的功能是释放指针P所指向的内存区。它的参数p必须是先前用malloc函数或者calloc函数时返回的指针。
malloc函数和calloc函数是对内存区域进行分配的,free函数是释放已经不用的内存区域的。有了这3个函数就可以根据程序的需要进行动态内存分配了。至于是选用malloc函数还是calloc函数进行内存分配,那就由你自己来选择了。
下面是一个利用动态内存分配来实现的动态数组的例子。
#include stdio.h
#include stdlib.h
#include malloc.h
void main()
{
int i,n;
int *arr;//arr是一个整型指针变量,也可以理解成一个整型数组名
printf(请输入数组元素的个数\n);
scanf(%d,n);
if((arr=(int *)malloc(n*sizeof(int)))==NULL)
{
printf(不能成功分配空间!\n);
exit(1);
}
/*上面的代码也可写成*/
/*arr=(int *)malloc(n*sizeof(int));
if(arr==NULL)
{
printf(不能成功分配空间!\n);
exit(1);
}
*/
printf(请输入数组的元素:\n);
for(i=0;in;i++)
scanf(%d,arr[i]);
printf(输出数组的元素:\n);
for(i=0;in;i++)
printf(%d ,arr[i]);
printf(\n);
}
三、链表
3.1 链表的概念
说到链表,我们还得提一提数组。即使是动态数组,它也是有计算机分配好固定大小的存储空间。任何一个数组元素的位置都可以通过一个计算公式算出来,因此,采用数组存储信息,可以实现对数组元素的随机访问。但是,如果对数组元素进行插入和删除操作,则会引起
您可能关注的文档
- 七大买房技巧让菜鸟速成达人75261170.doc
- 三月份原辅料月报.doc
- 三强煤矿职工春节复产安全培训考试题.doc
- 三亦华创公司销售人员考核管理办法13730.doc
- 一通三防报告.doc
- “钱荒心不慌”——当前经济形势下银行面临的机遇与风险分析.doc
- “敬畏生命”大讨论.doc
- 【健康养生必知】五脏排毒必知.doc
- 《金工实习》课程标准刘红霞.doc
- “卫生与健康”小贴士活动策划.doc
- 江西省贵溪市职业能力倾向测验事业单位考试(医疗卫生类E类)试题推荐.docx
- 贵州省清镇市事业单位考试(自然科学专技类C类)职业能力倾向测验试卷最新.docx
- 湖北省宜都市事业单位考试职业能力倾向测验(医疗卫生类E类)强化训练题库最新.docx
- 文稿分析longman english world book 2a测试3ch lew 2a test paper 3LEW2A.pdf
- 八级平行四边形性质.pdf
- 新课标unit 8 must belong to carla section grammar focus-4c语法优质课件共.pptx
- 文本文稿教程server error1500 thats unit 11how was your school.pdf
- 讲稿笔记本广达-d pb.pdf
- 教版级语文上册全册课件试用五彩池.pptx
- 典中点课件秋上册数学人教版章分式同分母相加减.pptx
最近下载
- 机械测量培训课程.pptx
- 医疗器械安全有效基本要求清单填写参考模板2024年.docx
- 人教版(2024)数学一年级下册四 100以内的口算加、减法 练习.pptx
- 电气装置安装工程质量检验及评定规程DLT5161 2018.doc
- 做好客舱清洁前准备课件讲解.pptx
- 铁道信号论文-信号机维护与故障处理.doc
- ISO13485质量手册+全套程序文件.docx VIP
- 汽车机械维修工(高级技师)职业鉴定考试题库资料(高频300题).pdf
- 多维视角下梧州市普通高中体育生学训现状剖析与发展路径探索.docx
- 江南事业编招聘考试题历年公共基础知识真题汇总-综合应用能力(2010-2021.pdf VIP
文档评论(0)