数据结构
数据结构,C++
海是倒过来的天001
这个作者很懒,什么都没留下…
展开
-
数据结构(二十一)之 树
1.1 基本概念1.1.1树的定义树是一种非线性的数据结构(树的定义是使用了递归,所以与树相关的算法都使用递归)树是由 n(n>=0) 个节点组成的有限集合如果 n= 0称为空树如果 n > 0则:有一个特定的称之为根(root)的节点根节点只有直接后继,但没有直接前驱除根以外的其他节点划分为 m(m >0) 个互补相交的有限集合 T0 ,T1, 。。。Tm...原创 2020-04-25 10:19:08 · 2153 阅读 · 0 评论 -
数据结构(十 五)之老生常谈的两个宏(Linux)
1.1 第一个宏定义1.1.1 offset宏#ifndef offsetof#define offsetof(TYPE, MEMBER) ((size_t)&((TYPE*)0)->MEMBER)#endif1.1.2 编译器做了什么offsetof 用于计算TYPE 结构体中MEMBER成员的偏移位置那么问题来了, 直接使用0地址不会导致程序崩溃吗?1.1...原创 2020-04-25 09:13:20 · 309 阅读 · 0 评论 -
数据结构(十 八)之字符串类的实现
1.1 字符串类的设计1.1.1 继承关系图1.1.2 字符串类的实现1.1.3 注意事项无缝实现String对象和 char * 字符串的互操作操作符重载函数需要考虑是否支持const 版本通过C语言中的字符串函数实现String的成员函数1.2字符串中常用的成员函数1.2.1成员函数成员函数功能描述operator[]操作符重载函数,访问指定下标的...原创 2020-04-11 17:38:55 · 514 阅读 · 0 评论 -
数据结构(十 六)之 栈
1.1 栈1.1.1栈的定义栈是一个特殊的线性表栈仅能在线性表的一端进行操作栈顶(Top): 允许操作的一端栈底(Bottom): 不允许操作的一端1.1.2栈的特性后进先出(Last In First Out)1.1.3 栈的操作创建栈(Stack())销毁栈(~Stack())清空栈(clear()) 因为栈是容器,所以要有清空容器的操作进栈(push...原创 2020-04-10 08:18:59 · 122 阅读 · 0 评论 -
数据结构(十 四)之循环链表和双向链表
1.1 循环链表1.1.1什么是循环链表概念上任意数据元素都有一个前驱和一个后继所有的数据元素的故向你构成一个逻辑上的环实现上循环链表是一种特殊的单链表尾节点的指针域保存了首节点的地址1.1.2 循环链表的继承层次1.1.3 循环链表的实现思路通过模板定义Circle类, 继承自LinkList类定义内部函数 last_to_first(),用于将单链表首...原创 2020-04-09 21:02:20 · 130 阅读 · 0 评论 -
数据结构(十 三)之 再论智能指针
1.11.1.1 思考使用智能指针(SmartPointer)替换单链表(LinkList)中的原生指针是否可行?直接抛出异常了,1.1.2 问题出在了哪里SmartPointer的设计方案指针生命周期结束时主动释放堆空间一片堆空间最多只能由一个指针标识杜绝指针运算和制造比较1.1.3 新的设计方案-创建新的智能指针1.2 新的设计方案 1.2.1 ...原创 2020-04-09 21:02:08 · 130 阅读 · 0 评论 -
数据结构(十 一)之静态单链表
1.1 静态单链表1.1.1 静态单链表的引出如果需要频繁的增删数据,单链表就可以如果数据元素的最大个数固定,那有没有更好的选择呢1.1.2 单链表的缺陷触发条件长时间使用单链表对象频繁增加和删除数据元素可能的结果堆空间产生大量的内存碎片,导致系统运行缓慢1.1.3 新的线性表设计思路:在单链表的内部增加一片预留的空间,所有的Node 对象都在这片空间中动...原创 2020-04-06 09:10:47 · 181 阅读 · 0 评论 -
数据结构(十)之单链表的遍历和优化
1.1 遍历1.1.1 问题如何遍历单链表中的每一个数据元素1.1.2 当前单链表的遍历方法int main(){ LinkList<int> list; for(int i = 0; i < 5; i++) // o(n) { list.insert(0,i); } for(int i = 0; i ...原创 2020-04-05 17:39:46 · 261 阅读 · 0 评论 -
数据结构(九)之顺序表和单链表的对比分析
1.11.1.1问题如何判断某个数据元素是否存在于线性表中?一个循环遍历就可以了,而在实际中经常会查找某个值是否在线性表中。所以用封装,在以后直接使用就可以,不用每次写这个循环遍历。所以需要为线性表增加一个find函数1.1.2 有趣的问题顺序表的整体时间复杂度比单链表要低,那么单链表还有使用价值吗?1.1.3效率的深度分析实际工程开发中,时间复杂度只是效率的一个参考指标...原创 2020-04-05 16:07:54 · 204 阅读 · 0 评论 -
数据结构(八)之链表
1.1 链表的引出1.1.1 思考顺序存储结构线性表有什么缺陷?插入和删除操作需要移动大量的元素。1.1.2 如何解决上面的问题?使用链表链表的定义为了表示每一个数据元素与其后继元素之间的逻辑关系; 数据元素处理存储本身的信息外,还需要存储其直接后继的信息ai 和a(i+1) 是线性表中的两个相邻数据元素; 在物理内存中无相邻关系1.1.3 链式...原创 2020-04-05 11:50:14 · 133 阅读 · 0 评论 -
数据结构(七)之数组类的创建
1.1 完成 Array 类的具体实现1.1.1 1.1.2 需求分析创建数组类代替原生数组的使用数组类包括长度信息数组类能主动发现越界访问1.1.3 Array 设计要点抽象类模板,存储空间的位置和大小由子类完成重载数组操作符,判断访问下标是否合法提供数组长度的抽象访问函数提供数组对象间的复制操作1.1.4 Array 类的声明template <...原创 2020-04-04 22:06:21 · 394 阅读 · 0 评论 -
数据结构(六)之线性表
1.1 线性表 1.1.1 生活中的线性表幼儿园小朋友排队的情况1.1.2 线性表的表现形式零个或多个元素组成的集合数据元素在位置上是有序排列的数据元素的个数是有限的数据元素的类型必须相同1.1.3 线性表(List)的抽象定义线性表是具有相同类型的n(n>= 0)个数据元素的有限序列(a0, a1 , 。。。 an)ai 是表项(数据元素),n是表长度1...原创 2020-04-04 12:10:59 · 581 阅读 · 0 评论 -
数据结构(五)之顶层父类
1.1 顶层父类1.1.1 经验当代软件架构时间中的经验尽量使用单重继承的方式进行系统设计尽量保持系统中只存在单一的继承树(方法是创建一个抽象的顶层父类)尽量使用组合的关系代替继承关系1.1.2 不幸的事实C++ 的灵活性使得代码中可以存在多个继承树C++编译器的差异使得同样的代码可能表现不同的行为1.1.3 new操作失败会怎样?new 操作如果失败会怎样?(...原创 2020-04-02 07:12:31 · 363 阅读 · 0 评论 -
数据结构(四)之异常
1.1 C++异常简介1.1.1 注意事项异常不是错误,异常是C++中可以预料到的一条分支错误是不期望出现的,是不可以预见的。1.1.2 异常语法C++内置了异常处理的语法元素 try … catchtry 语句中处理正常的代码逻辑catch 语句处理异常的情况try语言中的异常由对应的catch语句处理try { double r = divide(1,0); //...原创 2020-04-01 20:03:24 · 302 阅读 · 0 评论 -
数据结构(三)之智能指针
1.1 内存泄漏(臭名昭著的Bug) 1.1.1内存泄漏动态申请堆空间,用完后不归还C++中没有垃圾回收的机制指针无法控制所指堆空间的生命周期(指针变量和他所指向的内存空间变量是两个不同的变量)。1.1.2 智能指针指针生命周期结束时主动释放堆空间一片堆空间最多只能由一个指针标识杜绝指针运算和指针比较1.1.3 智能指针的设计方案通过类模板描述指针的行为能够定义不...原创 2020-03-31 21:05:34 · 164 阅读 · 0 评论 -
数据结构(二)之 程序的灵魂(算法)
1.1 初始程序的灵魂1.1.1 数据结构数据结构静态的描述了数据元素之间的关系高效的程序需要在数据结构的基础上设计和选择算法高效的程序包括1. 到的数据结构2. 合适的算法1.1.2 算法的本质算法本质是特定问题求解步骤的描述在计算机中表现为指令的有限序列算法是独立存在的一种解决问题的方法和思想对于算法而言,语言并不重要,重要的是思想1.1.3 算法的...原创 2020-03-31 19:18:51 · 344 阅读 · 0 评论 -
数据结构(一)之 进阶高手的大门和数据的艺术
1.1 程序 1.1.1 程序的本质程序是为了解决实际问题而存在的,从本质而言,程序是解决问题的步骤描述1.1.2 问题问题: 怎样把大象放到冰箱里?1.1.3 一小步的进阶一小步的进阶 : 理解实际的问题确认问题类型 : 如: 数值计算,求最小值个数确认求解步骤: 如:打开文件,读文件,关闭文件,计算和1.1.4 如何判断问题求解步骤的好坏?举例: 求 1...原创 2020-03-30 21:59:45 · 94 阅读 · 0 评论