随笔分类 -  数据结构

摘要:单链表的每个结点增加一个指针域,用于指向结点的前驱 单链表的另一个缺陷: 单向性:只能从头结点开始高效访问链表中的数据元素 缺陷:如果需要逆向访问单链表中的数据元素将及其低效 c++ int main() { LinkList l; for(int i = 0; i =0; i ) // O(n^2 阅读全文
posted @ 2018-09-17 16:44 小胖鼠 阅读(146) 评论(0) 推荐(0)
摘要:1、循环链表简介 概念上: 任意数据元素都有一个前驱和一个后继 所有的数据元素的关系构成一个逻辑上的环 实现上: 循环链表是一种特殊的单链表 尾结点的指针域保存了首结点的地址 循环链表的继承层次结构 2、循环链表的实现思路 通过模板定义 类,继承自 类 定义内部函数 ,用于将单链表首尾相连 特殊处理 阅读全文
posted @ 2018-09-17 15:36 小胖鼠 阅读(299) 评论(0) 推荐(0)
摘要:1、 智能指针重构 需求:使用智能指针 替换单链表 中的原生指针 将原生指针更改为智能指针后,解决全部的编译问题,程序还是会出错,问题在于: 的设计方案存在的一些特性 指针的生命周期结束时主动释放堆空间 一片堆空间最多只能有一个指针标识 不允许指针运算和指针比较 需求:创建新的指针指针 是智能指针的 阅读全文
posted @ 2018-09-16 11:19 小胖鼠 阅读(339) 评论(0) 推荐(0)
摘要:问题1:创建异常对象时的空指针问题 创建一个空指针异常对象,意味着这会调用父类的构造函数 ,然后调用 ,然后调用 , 缺陷:没有处理参数为空指针的情况,默认为参数不能为空。 参数为空指针的情况应该合法,空指针作为字符串的一个特殊值,是有意义的,如果要复制的字符串是一个空指针,只需要返回一个空指针就可 阅读全文
posted @ 2018-09-08 23:51 小胖鼠 阅读(376) 评论(0) 推荐(0)
摘要:1、静态单链表的提出 需要频繁增删数据元素,可以选择单链表,如果数据元素的最大个数是固定的,可能需要一种新的数据结构 单链表的一个缺陷 触发条件:长时间使用单链表对象频繁增删数据元素 可能结果:堆空间产生大量的内存碎片,导致系统运行缓慢 原因:每增加一个数据元素,都会在堆空间中创建一个数据结点,程序 阅读全文
posted @ 2018-09-03 20:28 小胖鼠 阅读(659) 评论(0) 推荐(0)
摘要:1、单链表遍历优化 遍历单链表中的每个一数据元素 c++ LinkList list; for(int i = 0; i = 0) && (i 0)); if(ret) { // 将游标定位到目标位置i的地方 m_current = position(i) next; m_step = step; 阅读全文
posted @ 2018-08-19 15:43 小胖鼠 阅读(1459) 评论(0) 推荐(0)
摘要:1、如何判断某个数据元素是否存在于线性表中? 操作: 可以为线性表 增加一个查找操作 参数:待查找的数据元素 返回值: 大于0:数据元素在线性表中第一次出现的位置 1:数据元素不存在 针对基础数据类型,首先在顶层父类 中增加一个虚函数 ,然后在各子类中实现这个函数 针对自定义类类来说 解决方案1:在 阅读全文
posted @ 2018-08-19 11:29 小胖鼠 阅读(810) 评论(0) 推荐(0)
摘要:1、链式存储结构线性表的实现: 设计要点:类模板 通过头结点访问后继节点 定义内部结点类型Node,用于描述数据域和指针域 实现线性表的关键操作(增、删、改、查等) 2、LinkList 具体实现 问题:头结点隐患,实现代码优化 创建 时,会调用 ,用泛指类型创建头结点的数据域,当泛指类型为用户自定 阅读全文
posted @ 2018-08-18 11:46 小胖鼠 阅读(320) 评论(0) 推荐(0)
摘要:1、问题引入 开发数组类模板的原因在于:在创建基于顺序存储结构的线性表时,发现这样的线性表可能被误用,因为重载了数组访问操作符,使用时跟数组类似,但是线性表和数组有很大的区别,所以激发了新的需求:开发数组类替换C++原生数组类,因为原生数组类也存在着很大缺陷,使用不方便。 基于顺序存储结构的线性表的 阅读全文
posted @ 2018-08-17 22:29 小胖鼠 阅读(685) 评论(0) 推荐(1)
摘要:1、一些问题 顺序存储结构的线性表存在着两个方面的问题: 1. 功能方面:数组操作符的重载,线性表有可能被误用为数组使用 2. 效率方面:在一些场合中,效率上是有隐患的 解决方案:当前的库中没有可以代替原生数组的实现,所以有可能会被误用,需要创建一个数组类代替原生数组。 2、数组类抽象类模板的创建 阅读全文
posted @ 2018-08-16 22:27 小胖鼠 阅读(3092) 评论(0) 推荐(0)
摘要:1、效率分析 采用大O表示法来进行效率分析 最耗时的两个操作是: 和`remove` 长度相同的两个 ,插入和删除操作的平均耗时是否相同? 主要分析最耗时的 循环,对于 来说,就是整型的赋值操作 对于 来说,就是两个字符串对象之间赋值操作,可能会发生 ,意味着再来一个 循环单个字符进行赋值 由于数据 阅读全文
posted @ 2018-08-16 11:14 小胖鼠 阅读(190) 评论(0) 推荐(0)
摘要:1、StaticList类模板 的设计要点:类模板 使用原生数组作为顺序存储空间 使用模板参数决定数组大小 2、DynamicList类模板 设计要点:类模板 申请连续堆空间作为顺序存储空间 动态设置顺序存储空间的大小 保证重置顺序存储空间时的异常安全性 异常安全性的概念: 不泄露任何资源 不允许破 阅读全文
posted @ 2018-08-15 13:40 小胖鼠 阅读(722) 评论(0) 推荐(0)
摘要:顺序存储结构 类的抽象实现,该类继承于线性表抽象类 类 顺序存储结构的抽象类 的设计要点: 抽象类模板,存储空间的位置和大小由子类完成 实现顺序存储结构线性表的关键操作(增、删、改、查等) 提供数组操作符,方便快速获取元素 类模板如下: 继承于 ,需要将 中的 函数一一实现 下面对 的关键操作进行具 阅读全文
posted @ 2018-08-15 10:24 小胖鼠 阅读(246) 评论(0) 推荐(0)
摘要:1、顺序存储的定义 定义:线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表中的数据元素 | $a_1$ | ...... | $a_{i 1}$ | $a_i$ | ...... | $a_{n 1}$ | 2、相关操作 程序设计思路: 可以用一维数组来实现顺序存储结构 存储空间: 阅读全文
posted @ 2018-08-15 09:39 小胖鼠 阅读(279) 评论(0) 推荐(0)
摘要:1、线性表 线性表( )的表现形式 零个或多个数据元素组成的集合 数据元素在位置上是有序排列的 数据元素的个数是有限的 数据元素的类型必须相同 线性表的抽象定义: 线性表是具有相同类型的$n(\geq0)$ 个数据元素的有限序列 $$(a_0, a_1, ..., a_{n 1})$$ $a_i$是 阅读全文
posted @ 2018-08-14 10:50 小胖鼠 阅读(355) 评论(0) 推荐(0)