自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 数据结构(二十一)之 树

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 2604

原创 数据结构(十 五)之老生常谈的两个宏(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 327

原创 数据结构(十 八)之字符串类的实现

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 550

原创 数据结构(十 六)之 栈

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 137

原创 数据结构(十 四)之循环链表和双向链表

1.1 循环链表1.1.1什么是循环链表概念上任意数据元素都有一个前驱和一个后继所有的数据元素的故向你构成一个逻辑上的环实现上循环链表是一种特殊的单链表尾节点的指针域保存了首节点的地址1.1.2 循环链表的继承层次1.1.3 循环链表的实现思路通过模板定义Circle类, 继承自LinkList类定义内部函数 last_to_first(),用于将单链表首...

2020-04-09 21:02:20 141

原创 数据结构(十 三)之 再论智能指针

1.11.1.1 思考使用智能指针(SmartPointer)替换单链表(LinkList)中的原生指针是否可行?直接抛出异常了,1.1.2 问题出在了哪里SmartPointer的设计方案指针生命周期结束时主动释放堆空间一片堆空间最多只能由一个指针标识杜绝指针运算和制造比较1.1.3 新的设计方案-创建新的智能指针1.2 新的设计方案 1.2.1 ...

2020-04-09 21:02:08 143

原创 数据结构(十 一)之静态单链表

1.1 静态单链表1.1.1 静态单链表的引出如果需要频繁的增删数据,单链表就可以如果数据元素的最大个数固定,那有没有更好的选择呢1.1.2 单链表的缺陷触发条件长时间使用单链表对象频繁增加和删除数据元素可能的结果堆空间产生大量的内存碎片,导致系统运行缓慢1.1.3 新的线性表设计思路:在单链表的内部增加一片预留的空间,所有的Node 对象都在这片空间中动...

2020-04-06 09:10:47 218

原创 数据结构(十)之单链表的遍历和优化

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 272

原创 数据结构(九)之顺序表和单链表的对比分析

1.11.1.1问题如何判断某个数据元素是否存在于线性表中?一个循环遍历就可以了,而在实际中经常会查找某个值是否在线性表中。所以用封装,在以后直接使用就可以,不用每次写这个循环遍历。所以需要为线性表增加一个find函数1.1.2 有趣的问题顺序表的整体时间复杂度比单链表要低,那么单链表还有使用价值吗?1.1.3效率的深度分析实际工程开发中,时间复杂度只是效率的一个参考指标...

2020-04-05 16:07:54 220

原创 数据结构(八)之链表

1.1 链表的引出1.1.1 思考顺序存储结构线性表有什么缺陷?插入和删除操作需要移动大量的元素。1.1.2 如何解决上面的问题?使用链表链表的定义为了表示每一个数据元素与其后继元素之间的逻辑关系; 数据元素处理存储本身的信息外,还需要存储其直接后继的信息ai 和a(i+1) 是线性表中的两个相邻数据元素; 在物理内存中无相邻关系1.1.3 链式...

2020-04-05 11:50:14 146

原创 数据结构(七)之数组类的创建

1.1 完成 Array 类的具体实现1.1.1 1.1.2 需求分析创建数组类代替原生数组的使用数组类包括长度信息数组类能主动发现越界访问1.1.3 Array 设计要点抽象类模板,存储空间的位置和大小由子类完成重载数组操作符,判断访问下标是否合法提供数组长度的抽象访问函数提供数组对象间的复制操作1.1.4 Array 类的声明template &lt...

2020-04-04 22:06:21 417

原创 数据结构(六)之线性表

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 734

原创 数据结构(五)之顶层父类

1.1 顶层父类1.1.1 经验当代软件架构时间中的经验尽量使用单重继承的方式进行系统设计尽量保持系统中只存在单一的继承树(方法是创建一个抽象的顶层父类)尽量使用组合的关系代替继承关系1.1.2 不幸的事实C++ 的灵活性使得代码中可以存在多个继承树C++编译器的差异使得同样的代码可能表现不同的行为1.1.3 new操作失败会怎样?new 操作如果失败会怎样?(...

2020-04-02 07:12:31 382

原创 数据结构(四)之异常

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 316

原创 数据结构(三)之智能指针

1.1 内存泄漏(臭名昭著的Bug) 1.1.1内存泄漏动态申请堆空间,用完后不归还C++中没有垃圾回收的机制指针无法控制所指堆空间的生命周期(指针变量和他所指向的内存空间变量是两个不同的变量)。1.1.2 智能指针指针生命周期结束时主动释放堆空间一片堆空间最多只能由一个指针标识杜绝指针运算和指针比较1.1.3 智能指针的设计方案通过类模板描述指针的行为能够定义不...

2020-03-31 21:05:34 175

原创 数据结构(二)之 程序的灵魂(算法)

1.1 初始程序的灵魂1.1.1 数据结构数据结构静态的描述了数据元素之间的关系高效的程序需要在数据结构的基础上设计和选择算法高效的程序包括1. 到的数据结构2. 合适的算法1.1.2 算法的本质算法本质是特定问题求解步骤的描述在计算机中表现为指令的有限序列算法是独立存在的一种解决问题的方法和思想对于算法而言,语言并不重要,重要的是思想1.1.3 算法的...

2020-03-31 19:18:51 361

原创 数据结构(一)之 进阶高手的大门和数据的艺术

1.1 程序 1.1.1 程序的本质程序是为了解决实际问题而存在的,从本质而言,程序是解决问题的步骤描述1.1.2 问题问题: 怎样把大象放到冰箱里?1.1.3 一小步的进阶一小步的进阶 : 理解实际的问题确认问题类型 : 如: 数值计算,求最小值个数确认求解步骤: 如:打开文件,读文件,关闭文件,计算和1.1.4 如何判断问题求解步骤的好坏?举例: 求 1...

2020-03-30 21:59:45 109

原创 C++进阶剖析( 二十六)之数组类模板

1.1 理论1.1.1 模板参数可以是数值型参数(非类型参数)template <typename T ,int N>void func(){ T a[N]; //使用模板参数定义局部数组}func<double,10>();1.1.2 数值型模板参数的限制变量不能作为模板参数浮点数不能作为模板参数类对象不能作为模板参数本质: 模板参数是在...

2020-03-29 11:06:13 143

原创 C++进阶剖析( 二十五)之类模板

1.1 类模板1.1.1思考在C++中是否能够将泛型的思想应用于类?1.1.2一些类主要用于存储和组织数据元素类中数据组织的方式和数据元素的具体类型无关如: 数组类,链表类,Stack类,Queue类等C++中将模板的思想应用于类,使得类的实现不关注数据元素的具体类型,而只关注类所需要实现的功能1.1.3 C++中的类模板以相同的方式处理不同的类型在类声明前使用templ...

2020-03-29 10:04:34 135

原创 C++进阶剖析( 十 八)之其他操作符

1.1 逻辑操作符1.1.1 逻辑运算符的原生意义操作数只用两种值(true 和 false)逻辑表达式不用完全计算就能确定最终值(短路规则)最终结果只能是true或者 false1.1.2 原生语义举例int func(int i){ cout<<"int func(int i) : i= "<< i<<endl; return i;...

2020-03-26 22:17:47 105

原创 C++进阶剖析( 十 六)之字符串类,数组访问操作符,经典问题三

1.11.1.11.1.21.1.31.21.2.11.2.21.2.31.3实例1.3.11.3.21.3.31.41.4.11.4.21.4.31.51.5.11.5.21.5.3参考一 :狄泰软件学院C++进阶剖析参考二 : C++ primer中文版

2020-03-24 20:00:33 190

原创 C++进阶剖析( 十 五)之操作符重载

1.1 复数类1.1.1案例引出1.1.2 解决一:实例代码下面的代码使用了 友元语法。#include <stdio.h>#include <stdlib.h>#include <string.h>class Complex{private: int mi; int mj;public: Complex(int i=0 ,int...

2020-03-22 18:00:58 93

原创 C++进阶剖析( 十 二)之静态成员变量和静态成员函数

1.1 1.1.11.1.21.1.31.21.2.11.2.21.2.31.3实例1.3.11.3.21.3.31.41.4.11.4.21.4.31.51.5.11.5.21.5.3参考一 :狄泰软件学院C++进阶剖析

2020-03-22 10:57:14 87

原创 C++进阶剖析(八)之封装

1.1封装基本思考 1.1.1 思考学习电脑组装需要多少时间?学习电脑组装是否需要学习显示器,键盘,鼠标,主板,内存等部件的设计和制造?1.1.2 类通常分为以下两个部分类的实现细节类的使用方式开发者需要考虑类的具体实现细节,而使用者只需要考虑这个类的使用方式。例如普通用户使用手机 :只需要学习如何发短信,打电话,拍照等手机开发工程师 需要考虑手机内部的实现细节...

2020-03-21 15:47:34 116

原创 C++进阶剖析(七)之面向对象思想

1.1面向对象思想引出1.1.1OO思想引出在日常生活中,我们经常对事物进行分类,比如常见的分类方法:12星座,图书馆中不同类型的书籍放在不同的楼层中。那我们能不能将这种分类的思想引入到计算机程序设计呢?这种思想就是OO思想1.1.2面向对象设计意义根据用户需求直接映射到程序解决方案中将生活中的习惯的思维引入到程序设计中以模块为中心形成可复用的软件系统(每个小的模块都是一个类别)...

2020-03-21 09:42:53 224

原创 C++进阶剖析之错误总结

1.1 1.1.1 错误一报错的主要原因是: 同一个程序中出现了两个相同的符号1.1.21.1.3参考一 : 狄泰软件课程如有侵权:请联系邮箱 1986005934@qq.com

2020-03-17 22:14:55 83

原创 (二) Redis中的链表List

1.1 链表1.1.1 基本数据结构在这里插入代码片1.1.21.1.31.21.2.11.2.21.2.31.3实例1.3.11.3.21.3.31.41.4.11.4.21.4.31.51.5.11.5.21.5.3S参考一 : redis源码参考二: 黄健宏 Redis设计与实现如有侵权:请联系邮箱 1986005934@qq.com...

2020-03-15 20:39:36 151

原创 C语言进阶剖析(七) C语言中常犯错误总结

1.11.1.1总结一变量的定义必须放在函数的开始位置,如果不放在开始位置就会报错。下面的程序看不出什么错误 ,看到这个错误感觉一头雾水,感觉自己没有写错,结果调试了半天才看出来。变量的定义必须放在函数的开头位置,中间不能有函数的调用等操作。1.1.21.1.31.21.2.11.2.21.2.31.3实例1.3.11.3.21.3.31.41.4.11.4....

2020-03-15 14:49:05 138

原创 (六)C 语言之结构体

1.1 结构体类型定义及结构体变量定义1.1.1 略过1.2 结构体做函数参数1.2.1 结构体赋值编译器行为研究typedef struct Teacher{ char name[32]; int age;} Teacher;int main(){ Teacher t1 ={"zhangsan",32}; Teacher t2 ; t2 =t1; ...

2020-03-15 10:56:07 149

原创 (五)C 语言之数组

1.1 基本概念1.1.1 概念1)元素类型角度:数组是相同类型的变量的有序集合 测试指针变量占有内存空间大小2)内存角度:联系的一大片内存空间1.1.2 数组初始化//数组元素的个数可以显示或隐式指定//分析数组初始化{0}与memset比较int main(){ int i = 0; int a[10] = {1,2}; //其他初始化为0 int b[] = {1,...

2020-03-15 08:46:08 151

原创 (四)C 语言之指针专题二

1.1 1 理解指针必须和内存四区概念相结合1.1.1 理论主调函数 被调函数a)主调函数可把堆区、栈区、全局数据内存地址传给被调用函数b)被调用函数只能返回堆区、全局数据内存分配方式a)指针做函数参数,是有输入和输出特性的。b) 输入特性是指主调函数分配内存c) 输出特性是指被调函数分配内存,供主调函数使用int getMem(char ** str1 /*out*/,in...

2020-03-14 18:59:11 168

原创 (三)C 语言之指针专题一

1.1 指针铁律1 指针也是一种类型1.1.1 指针是变量指针也是一种变量,占有内存空间,用来保存内存地址测试指针变量占有内存空间大小 sizeof(char *);printf("sizeof(char *)=%d\n",sizeof(char*)); //4 32位平台 ,//8 64位printf("sizeof(int *)=%d\n",sizeof(int*)); ...

2020-03-14 14:10:35 355

原创 (一)make之make和makefile初识

1.1 make 和makefile1.1.1 makemake 是一个应用程序解析源程序之间的依赖关系根据依赖关系自动维护编译工作执行宿主操作系统中的各种命令1.1.2 makefilemakefile是一个描述文件定义一系列的规则类指定源文件编译的先后顺序拥有特定的语法规则,支持函数定义和函数调用能直接集成操作系统中的各种命令1.1.3 makefile本质ma...

2020-03-08 16:02:57 151

原创 (二)C 语言之内存四区 和函数调用

1.1 数据类型本质分析1.1.1 数据类型概念类型相同的数据有相同的表示方式,存储格式以及相关的程序中使用的所有数据必定属于某一种数据类型1.1.2 数据类型的本质思考思考数据类型和内存的关系? 这和数据类型的本质有关系C/C++为什么会引入数据类型?为了方便的表示现实世界中的人和物1.1.3 数据类型的本质注意:一定要站在C/C++编译器的角度思考问题1.1.3.1...

2020-03-08 11:40:20 210

原创 (一)C 语言之数据类型与变量之间的关系

1.1 数据类型和变量 1.1.1 啥是数据类型数据类型是一种模子(可以类似于打蜂窝煤 的那个机器)数据类型是固定内存大小的别名数据类型只是一种模子,并不会实际的占用内存空间,只有当用模子(数据类型)定义变量的时候才会占用空间。1.1.2 变量变量是一段实际连续存储空间的别名程序中通过变量来申请并命名存储空间通过变量的名字可以使用存储空间注意:sizeof是操作符,不是...

2020-03-07 20:31:50 2530

原创 UnixC( 六)之信号

1.11.1.1中断: CPU执行的时候被打断。信号:软中断软中断:软件模拟的中断机制。中断处理程序:CPU被打断以后,CPU并不处理这个中断,而是让中断处理程序去专门的进行处理。中断和中断处理程序是异步的。所以信号是异步通信机制。-查看信号命令 : kill -l1.1.2 改变进程的处理函数#include <signal.h>typedef void (*s...

2019-07-28 08:52:29 244

原创 UnixC( 五)之管道和环境变量

1.1 环境变量1.1.1 概念理解每个进程都有自己的环境变量 ,bash进程为例bash 进程有自己的环境变量,这个变量是可以被子进程继承的,而bash又有自己的私有变量,这个变量是不能被子进程继承的。(1)export 关键字,在某个bash进程中export了一个变量,这个变量是可以被子进程继承的,即使是export 的环境变量也不能在另外一个新打开的bash中使用(这个bash...

2019-07-28 08:51:00 140

原创 UnixC( 四)之进程管理

1.1 进程基础进程是资源分配的基本单位(因为进程执行的时候,独占CPU),进程也是程序执行过程中,对使用到的资源的描述。每个进程都有自己的pid,还有自己的PCB,PCB记录了进程中资源的使用情况。数据类型运算符的优先级及其结合性常量和变量变量的作用域和生命周期1.1.1 进程中常用命令查看进程树pstree察看进程的信息ps -aux1.1.2 创建子进程...

2019-07-28 08:50:19 263

原创 C++进阶剖析(二十四)之函数模板

1.1泛型编程 1.1.1 概念不考虑具体数据类型的编程方式1.1.2 语法规则template 关键字用于声明开始进行范式编程typename关键字用于声明泛指类型template <typename T>void swap(T&a,T&b){T c =a;a =b;b =c;}1.2 深度理解函数模板1.2.1 函数模板深入...

2019-05-29 20:31:11 146

原创 C++进阶剖析(二十三)之 问题解析四

1.1 问题一1.1.1 new 和malloc 的区别new 关键字是C++的一部分malloc是由C库提供的函数(如果没有C库就不能申请内存空间)new 是以具体类型为单位进程内存分配malloc 以字节为单位进程内存分配new 在申请内存空间的时候可进行初始化malloc 仅仅根据需要申请定量的内存空间1.1.2 实例代码#include <iostream&g...

2019-05-28 22:42:13 132

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除