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

数据结构-C语言描述(第三版)第2章数组和链表.ppt

数据结构-C语言描述(第三版)第2章数组和链表.ppt

  1. 1、本文档共86页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Link是结构的成员名,它是指向struct node类型的指针。当一个结构中有一个或多个成员是指向它自身的指针时,称这种结构为自引用结构(self-referential structure)。 定义一个指向结构的指针可以使用定义语句:struct node *p;。使用typedef定义指向结构的指针类型的方法更灵活。例如: typedef struct node * Nodeptr; typedef struct node{ int Data; Nodeptr Link; }Node; 4. 动态存储分配 C语言中的变量可分为两类:静态变量(static variable)和动态变量(dynamic variable)。我们这里所说的静态变量,与C语言中由关键字static定义的静态存储类变量是两个不同的概念。静态变量是指在书写程序时定义和命名的变量,它的存储空间在它所在的程序一开始运行时便存在。C语言的存储类为static的变量是在定义该变量的函数中使用的,在程序整个运行期间都不释放。动态变量在程序编译时并不存在,只在程序运行时才创建,所以在程序书写时无法事先对其命名,因而,动态变量只能通过指针访问。 如同其他变量一样,动态变量是具有类型的。动态存储分配(dynamic memory allocation)是指在运行时根据程序要求为变量等对象分配存储空间的方法。C语言使用一种称为堆(heap)的数据结构,在运行时为动态变量分配存储空间。我们可以使用C语言的标准函数malloc和free动态地创建和撤销一个动态变量。如下面的语句: p=(Node*)malloc(sizeof(Node)); if (IS_FULL(p)){ fprintf(stderr, The memeny is full\n); exit(1); } 其中,IS_FULL(p)可由宏定义 #define IS_FULL(ptr) (!(ptr))来定义,stderr是出错信息输出流文件,语句exit(1);终止程序执行。上述程序段创建一个Node类型动态变量,并将它的地址赋给指针变量p。换句话说,p指向所创建的动态变量。其中,sizeof运算符计算Node类型的结构所需的存储空间的大小,从而确定应当分配给新变量的存储空间的大小。如果内存耗尽,则malloc函数返回NULL,表示内存已不足,程序终止运行。 当一个动态变量不再需要时,可以使用函数调用free(p)回收该变量所占用的空间。注意,执行free函数后,指针变量p的值是无定义的。 【程序2-2】 静态变量和动态变量。 void main() { char c=a; char *p=c; int *y; y=(int *)malloc(sizeof(int)); *y=10; printf(\n%d, %c , *y, *p); free(y); } 图2-4 静态变量和动态变量 使用指针使C语言程序设计十分灵活和高效,但如果使用不当会带来很大的程序隐患。空指针NULL不指向任何实际的对象,间接引用一个空指针,常会带来不可预期的结果。另外一种值得注意的情况是,如图2-4例子所示,y指向一个动态变量,在使用free(y)语句释放了它所指向的动态变量后,y成为不确定的指针,那么在再次对y赋适当值之前不应使用y的值。 2.3.2 单链表 上面我们回顾了与C语言的指针有关的规则。指针类型是构造链接存储结构的基础,在基于指针的链接结构中,单链表(singly linked list)是最基本的。 在单链表中,每个结点有两个域:存放元素的域Element和存放指向后继结点的指针域Link,如图2-5(a)所示。图2-5(c)是一个包含n个元素(a0, a1, …, an-1) 的单链表结构。我们称单链表的第一个结点为起始结点,指向起始结点的指针为头指针。图中指针变量first为头指针。头指针为NULL的单链表称为空表,这里我们使用电路的接地符号 表示空指针值,如图2-5(b)所示。尾结点没有后继结点,其指针域为NULL。图2-5中,我们用一个圆表示指针变量,其实,它与Link域具有完全相同的数据类型。 图2-5 单链表结构 (a) 结点结构;(b) 空表;(c) 非空表 1. 单链表的结点结构 单链表的每个结点的结构具有如下定义的结构类型: typedef s

文档评论(0)

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

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

1亿VIP精品文档

相关文档