04-链栈和链队列.ppt

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
合肥工业大学 计算机与信息学院 * 数据结构与算法(C++描述) 阙夏 计算机与信息学院 * * 第四章 链栈和链队列 第四章 链栈和链队列 4.1 引言 4.2 链栈 4.3 链队列 * 第四章 链栈和链队列 4.1 引言 前面已介绍的顺序栈、顺序队列的有关特性回顾与分析: 运算实现:简单,时间复杂度好。 存储特性:静态规模,编译前确定。 问题:程序的通用性和空间利用率之间的矛盾! 期望:在实际运行过程中,根据实际问题的需要临时确定存储空间,这就涉及到动态变量。 动态变量:在程序运行过程中产生和释放的变量。 与之相反的是静态变量, 静态变量:在程序运行过程中一直存在的变量。 在一般程序设计语言(如C、C++)中, 静态变量是出现在说明语句中的变量, 而动态变量则由于是在运行过程中产生,因而不会事先说明。 如何实现动态变量? 通过指针来实现:指针变量的说明,动态变量产生和释放 。 * 4.1 引言 下面依次介绍指针变量动态变量的说明,动态变量操作、产生和释放 。 (1)指针变量说明 例:变量说明语句 int m, n, *p,*q; 说明了4个变量,其中: m和n说明为int型, p,q为指向int型变量的指针,其所指示的变量名称分别为*p,*q。(动态变量) 指针和其所指示的变量之间的关系如下图所示。 10 20 p *p q *q 指针和目标变量的关系: 所谓指针指向一个变量,就是存放着目标变量的地址的值。 * 4.1 引言 (2)动态变量的操作 基本操作:和其他类型的变量类似,可以对动态变量赋值、引用。 特别要注意区分:指针赋值和动态变量赋值操作的关系和效果。 例如 语句 *p = *q; 和 p = q; 的效果存在明显的差异: 假设初始时*p=10; *q=20; 如图所示。 10 20 p *p q *q *p = *q的效果 20 10 20 p *p q *q p = q的效果 区别:一个是整型变量的赋值, 一个是指针型变量的赋值。 *p * 4.1 引言 (3)动态变量产生 动态变量需要在执行申请变量操作后才能产生,否则无效。 申请变量的操作如下:(对前面给出的变量说明) p=new int; ------产生一个int类型变量,并将该变量的地址放到指针变量p中。 (4)动态变量的释放 释放变量:将动态变量的存储空间还给系统,以便重新分配使用。 释放变量的操作: delete p; -----释放指针p所指示的变量(即*p)的存储空间 (因而使*p无效,除非重新赋值或申请) * 4.1 引言 例:阅读下面程序,写出运行结果。 int main() { int *p,*q; p=new int; q=new int; *p=10; *q=20; cout*p*qendl; *p=*q; *q=30; cout*p*qendl; p=q; *p=40; *q=50; cout*p*qendl; delete p; } 输出结果是? * 4.2 链栈 4.2.1 链表 为了避免前述的顺序存储方式在的问题规模事先难以确定的问题, 可以将表中元素用链地址连接起来构成一个表。由此而得到链表。 链表:将表中元素用链地址连接起来构成的表。 例如,下图就是一个链表的示意图,其中: 由若干称为结点的“单元”连接而成。 每个结点由两部分组成: 存放元素值的字段 存放下一个结点的地址的字段。 另外,有一个指向表头的指针(头指针)head,指示起点。

文档评论(0)

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

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

1亿VIP精品文档

相关文档