- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二章 指针与链表 安阳一中 张辉 一、静态存贮和动态存贮 1、静态存贮 程序中的变量一经说明,计算机操作系统就会在内存空间中分配相应的存贮单元,其中变量名是存贮单元的地址,而变量的值是存贮单元的内容,且该存贮单元自始至终都被该变量所占用,直到程序结束。如果变量是局部变量,那么在它的作用域内,一经说明也占有一定的存贮单元,直到退出其作用域为止。这样的变量,在程序执行过程中,不能随时使用随时分配存贮空间,也不能在程序执行的过程中,释放这些空间。也就是说,一旦给这些变量分配存贮空间,无论程序是否还需要使用,它们都要占用一定的存贮空间,以便给用户存贮数据。我们称具有这样特点的存贮为静态存贮,它所对应的变量称为静态变量。如字符类型、数组类型、记录类型等。这类变量的优点是存贮方便,查找容易,可以通过一个简单的公式随机存取表中的任一元素,逻辑关系上相邻的两个元素在物理位置上也是相邻的,很容易找到前趋与后继元素;缺点是在线性表的长度不确定时,必须分配足够大的存储空间,经常浪费了宝贵的存储资源;而线性表的容量一经定义确定后就难以扩充;在插入和删除线性表的元素时,需要移动大量的元素,时间效率也比较差。 2、动态存贮 在程序执行过程中,通过向操作系统申请存贮空间或释放存贮空间的命令,达到动态管理计算机的存贮空间,以保证存贮空间的充分利用。存贮空间可以随时申请、随时释放,这样的存贮方式称为动态存贮,其变量称为动态变量。指针变量即为动态变量。动态存储所需要的空间可以是不连续的,这样有利于充分利用零散的小空间。但缺无法用O(1)的时间实现存取了。如何用这些零散的空间存储数组这些大规模数据呢?如何表示这些数据之间的逻辑关系呢?为了表示这些物理存储单元之间的逻辑关系,对于每个数据元素来说,除了要存储它本身的信息(数据域data)外,还要存储它的直接后继元素的存储位置(指针域,一般用link 或next 表示)。我们往往把这两部分信息合在一起称为一个“结点node”。 N 个结点链接在一起就构成了一个链表。N=0时,称为空链表。同时,为了按照逻辑顺序对链表中的元素进行各种操作,我们需要定义一个变量用来存储整个链表的第一个结点的物理位置,这个变量称为“头指针,一般用H或head表示”。也可以把头指针定义成一个结点,称为“头结点”,头结点的数据域可以不存储任何信息,也可以存储线性表的长度等附加信息,头结点的指针域(头指针)存储指向第一个结点的指针,若线性表为空表,则头结点的指针域为空(NIL)。由于最后一个元素没有后继,所以线性表中最后一个结点的指针域为空(NIL)。由于此链表中的每个结点都只包含一个指针域,故称为“线性链表或单向链表”。 二、指针类型与指针变量 1.指针类型和指针变量的说明 type 指针类型标识符= ^基类型名; {基类型不能为文件类型} var 指针变量名:指针类型标识符; 2.申请存储单元 {动态申请、空间大小由指针变量的基类型决定} new(指针变量名); {PASCAL标准过程} Dispost() 3.指针变量的赋值 指针变量名:=NIL; {初始化,暂时不指向任何存储单元} 如何表示和操作指针变量?不同于简单变量(如A:=0;),PASCAL规定用“指针变量名^”的形式引用指针变量(如P^:=0;)。区分如下图所示: 如计算机执行下面的程序段时: NEW(H); H^:=123; NEW(H); H^:=234; 内存示意图如图所示(阴影部分表示该单元已被占): 4.相同基类型的指针变量之间可以进行相互赋值。如有下面的程序段,可以画出右边的示意图: var p1,p2:^integer; new(p1);new(p2); p1^:=90;p2^:=80; p1:=p2; p2^:=70; 5.关系运算 如:if p1=p2 then …… while p nil do …… 6.释放动态存储单元 dispose(指针变量名); 系统收回指针变量所指的内存单元另作它用,此时指针变量的值变成无定义。注意,我们应该养成一个好的习惯,就是及时释放不用的动态存储单元,很多同学使用指针变量时就知道new(p),而不知道及时dispose(p),最后造成内存空间溢出错误、出现死循环甚至死机现象。 三、单向链表 1、单向链表的结构 由于单向链表的每个结点都有一个数据域和一个指针域,所以,每个结点都可以定义成一个记录。一般,把head 称为头结点,head^.next称为头指针。比如,有如下一个单向链表,如何定义这种数据结构呢?方法如下: type point
您可能关注的文档
最近下载
- 中小学生国庆假期安全教育主题班会PPT课件.pptx VIP
- 《电子商务基础》第一章课件.pptx VIP
- 第2单元活动3 编程实现算法 课件湘科版信息科技五年级上册.ppt
- 1.2记录个人观点(课件)-三年级信息科技全一册(河北大学版2024).pptx VIP
- 《黄金交易基础知识》课件.pptx VIP
- (高清版)DB22∕T 2758-2017 黑参 地标.pdf VIP
- 品牌管理完整版课件全套ppt教学教程(最新).pptx
- 2025年GB 45673《危险化学品企业安全生产标准化通用规范》解读宣贯学习课件.pptx
- 消防救援人员申请结婚报告表.doc VIP
- 答司马谏议书选择题及答案.pdf VIP
文档评论(0)