- 博客(22)
- 资源 (1)
- 收藏
- 关注
原创 大小端内存存储模式
1.概念:大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。2.简明区分下面以unsigned int value = 0x12345678为例,分别看看在两种字节序下其存储情况,我们
2020-11-21 13:10:11
267
原创 数据结构之平衡二叉树(AVL)
1.介绍平衡二叉树,首先是一棵二叉查找树,但是它满足一点重要的特性:每一个结点的左子树和右子树的高度差最多为1。查找、插入和删除的时间复杂度都变成了O(lg n)。为了反映每个结点的高度差,在二叉查找树的结点中应该增加一个新的域——被称为平衡因子(BF),它的值是某个根结点的左子树深度减右子树深度的值。易知,对于一棵平衡二叉树,每个结点的平衡因子只可能是-1、0、1三种可能。将每个结点的平衡因子控制在-1、0、1三个值是靠一种称为旋转(Rolate)的操作保证的,视情况分为左旋转和右旋转。如图插入1的
2020-08-26 20:37:15
239
原创 数据结构之二叉排序树
二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。是数据结构中的一类。在一般情况下,查询效率比链表结构要高。1.定义一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树;(4)没有键值相等的结点。2.查找步骤:若根结点的关键字值等于查找的关键字,成功。否则,若小于根结点的关
2020-08-24 21:57:47
199
原创 函数指针以及指针函数
1.函数指针每个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针,称为函数指针。一般形式:数据类型(*指针变量名)(参数表)int maxvalue(int x,int y){ return(x>y)?x:y;}int minvalue(int x,int y){ return(x<y)?x:y;}int add(int x,int y){ return x+y;}//int(*p)(int a,int b)为函数指针bool
2020-06-18 23:22:31
171
转载 c++函数重载、函数重写、函数重定义
1.函数重载一个函数名字重新赋予它新的含义,是一个函数名字可以多用。是指同一作用域的不同函数使用相同的函数名,但是参数个数或类型不同(参数个数、参数类型或参数顺序)成员函数被重载的特征(1)相同的作用域(同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual关键字可有可无。2.函数重写函数重写:也称作覆盖,是用于类的继承中,函数名、参数个数、类型都相同,仅函数体不同。2、重写/覆盖(1)重写是指派生类函数覆盖基类函数。(2)重写的特征:①不同的作用域(分别位于派生类与
2020-06-18 20:57:58
1201
原创 四种智能指针C++
智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类,当超出了类的作用域是,类会自动调用析构函数,析构函数会自动释放资源。所以智能指针的作用原理就是在函数结束时自动释放内存空间,不需要手动释放内存空间。C++里面的四个智能指针: auto_ptr, shared_ptr, weak_ptr, unique_ptr 。其中auto_ptr已经被c++11弃用。1.auto_ptr采用所有权模式。
2020-06-18 18:08:50
202
转载 static关键字(C++)
1. 全局静态变量在全局变量前加上关键字static,全局变量就定义成一个全局静态变量.静态存储区,在整个程序运行期间一直存在。初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化);作用域:全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾。2. 局部静态变量在局部变量之前加上关键字static,局部变量就成为一个局部静态变量。内存中的位置:静态存储区初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意
2020-06-16 20:21:02
112
原创 const作用(C++)
const是C++的一个关键字。1.const修饰变量——常变量变量的值在运行期间不能改变,在定义的同时必需初始化(指定其值)。const int a=10;//用const声明变量a,a的值始终为3。//数据类型也可以是其他float,double,string,char等。const int a=5+5;//右边也可以是一个表达式。在此变量的基础上加上一个限定;存储单元的值不允许变化,也被成为“只读变量”。区别于#define指令定义的符号常量:符号常量只是用一个符号表示一个字符串
2020-06-15 22:04:09
199
原创 this指针基础(C++)
1.每个成员函数中都包含一个特殊的指针,这个指针的名字是固定的,成为this指针。它是指向类对象的指针,它的值是当前被调用的成员函数所在的对象的起始地址。通常情况下,this指针是隐式使用,作为参数被传递给成员函数的。例如,Box类的一个成员函数://定义是这样的int Box::volume(){ return(height*width*length);}实际上,是这样处理的:int Box::volume(Box *this)//在成员函数的形参表列中增加this指针{ retu
2020-06-15 11:44:27
167
原创 Ubuntu18.04更新为国内源
1.前言安装Ubuntu18.04后,因为Ubuntu的官方资源服务器在国外,使用国外源太慢了,为了解决这个问题,可以修改为国内源,这样会快很多。2.更改先切换为root用户。修改前备份sources.list文件,防止更新失败。#备份cp /etc/apt/sources.list /etc/apt/sources.list.bak打开并修改/etc/apt/sources.list文件(用vim或者gedit),将该文件内容全部删除。gedit /etc/apt/sources.lis
2020-06-05 15:30:11
354
原创 串的数据结构(C)
1.串的基本概念(1)串(又称字符串)是由n(n≥0)个字符组成的有限序列。(它是数据元素为单个字符的特殊线性表。)(2)串长 串中字符的个数(n≥0)。(3)空串 串中字符的个数为0 时称为空串 。(4)空白串 由一个或多个空格符组成的串。(5)子串 串S中任意个连续的字符序列叫S的子串; S叫主串。(6)子串位置 子串的第一个字符在主串中的序号。(7)字符位置 字符在串中的序号。(8)串相等 串长度相等,且对应位置上字符相等。(即两个串中的字符序列一一对应相等。)
2020-05-27 15:28:03
2294
原创 队列数据结构(C语言)
1.基本概念定义:只能在表的一端进行插入操作,在表的另一端进行删除操作的线性表。队尾插入,队头删除。特点:后进后出。一个队列的示意图如下:2.顺序队列: 顺序存储结构的队列。存在顺序队列的“假溢出”问题:顺序队列因多次入队列和出队列操作后出现的虽有存储空间但不能进行入队列操作的情况。解决办法:(1)采用顺序循环队列;(教材中的方法)(2)按最大可能的进队操作次数设置顺序队列的最大元素个数;(最差的方法)(3)修改出队算法,使每次出队列后都把队列中剩余 数据元素向队头方向移动一个位置;
2020-05-26 22:15:45
530
原创 数据结构——堆栈(C语言)
1.基本概念定义:限定只能在固定一端进行插入和删除操作的线性表。特点:后进先出。允许进行插入和删除操作的一端称为栈顶,另一端称为栈底。作用:可以完成从输入数据序列到某些输出数据序列的转换(1)顺序堆栈顺序堆栈:顺序存储结构的堆栈。顺序栈的存储结构:利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素.操作实现://定义typedef struct{ DataType stack[MaxStackSize]; int top;} SeqStack;//初始化St
2020-05-15 15:43:15
445
1
原创 数据结构——线性表链式存储结构4(C语言)
4.双向链表双向链表是每个结点除后继指针域外还有一个前驱指针域,它有带头结点和不带头结点,循环和非循环结构,双向链表是解决查找前驱结点问题的有效途径。结点结构如图示:下图是带头结点的循环双向链表的结构,可见,其前驱指针和后继指针各自构成自己的循环单链表。循环双向链表的插入过程如图示:删除过程如图示:5.静态链表在数组中增加一个(或两个)指针域用来存放下一个(或上一个)数据元素在数组中的下标,从而构成用数组构造的单链表。因为数组内存空间的申请方式是静态的,所以称为静态链表,增加的指针称做仿
2020-05-14 21:39:55
207
原创 数据结构——线性表链式存储结构3(C语言)
2.无空头链表:带头结点单链表无论在第一个数据元素结点前插入,还是在其他结点前插入,操作方法一样;而不带头结点单链表在第一个数据元素结点前插入,和在其他结点前插入,操作方法不一样。删除操作和插入操作类似。参考:本人上篇博客 //创建链表 ,在链表中添加一个数据 头添加 void AddListHead(int a) { //创建节点 struct Node * pTemp =(struct Node*)malloc(sizeof(struct Node));
2020-05-14 15:19:10
181
原创 数据结构——线性表链式存储结构2(C语言)
1.带头节点的单链表。(1)结点定义:typedef int DataType; //定义抽象数据类型//节点的结构体typedef struct Node{ DataType data; //节点的数据域 struct Node *next; //节点的指针域} SLNode;//初始化ListInitiate(head)void ListInitiate(SLNode **head){ *head = (SLNode *)malloc(sizeof(SL
2020-05-14 14:42:32
435
原创 数据结构——线性表顺序存储结构(c语言)
线性表:可以在任意位置插入和删除数据元素操作,有n(n>=0)个相同类型数据a0,a1,a2,a3。1.顺序存储结构(1)定义:实际上时对数组进行封装,多一个当前长度的变量而已。需要三个属性:存储空间的的起始位置,数组Data;数组最大的存储容量,Maxsize;线性表当前的长度:length。数组的长度是存放线性表的存储空间的总长度,一般初始化后不变。而线性表当前长度是线性表中的元素个数,是变化的。typedef int DataType;//定义抽象数据类型。#define MaxSi
2020-05-13 17:10:30
617
原创 二维数组与指针(c语言)
1.二维数组定义及初始化:int a[2][3]={{1,2,3}, {4,5,6}};上面定义并初始化了二维数组,类似于2行3列的行列式,可以认为由两个数组组成,a[0]和a[1]两个数组。2.二维数组指针类型//数组元素的地址int *p0=&a[1][1];//一维数组的地址int (*p1)[3]=&a[1];//二维数组的类型...
2020-04-13 21:47:26
1408
2
原创 指针变量的理解(C语言)
一.指针:是一种基本数据类型,用于存放地址型数据。指针很灵活,是c语言中比较难的一个知识点。二.基本数据类型的指针:int char double float long等。以int类型的指针为例1.声明:int *p;int 表示p装的地址,对应的空间的数据类型;*表示p的一个指针变量,p为指针的名字。2.初始化与赋值(未初始化和赋值的指针称为野指针。)假设定义 int a=...
2020-04-09 22:07:51
508
1
转载 Ubuntu18.04安装OpenCV4.2.0+OpenCV_Contrib4.2.0库
一.安装依赖的库。1. sudo apt-get install build-essential 2. sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev3. sudo apt-get install python-dev python-nu...
2020-04-08 11:09:54
2722
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人