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

链表讲稿.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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 链表的概念 说到链表,我们还得提一提数组。即使是动态数组,它也是有计算机分配好固定大小的存储空间。任何一个数组元素的位置都可以通过一个计算公式算出来,因此,采用数组存储信息,可以实现对数组元素的随机访问。但是,如果对数组元素进行插入和删除操作,则会引起

文档评论(0)

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

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

1亿VIP精品文档

相关文档