自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 笔试题型整理1:背包问题

1. 0-1背包问题一件物品只有选与不选两种情况,也就是说每件物品只能被选一次。[编程题]01背包f[ i ][ j ] 表示只看前 i 个物品,总体积是 j 的情况下,总价值最大是多少result = max{f[ n ][ 0~v ]}转移方程:f[ i ][ j ]:不选第 i 个物品, f[ i ][ j ] = f[ i - 1 ][ j ];选第 i 个物品, f[ i ][ j ] = f[ i - 1 ][ j - v[ i ]] + w[ i ];f[ i ][

2020-08-09 17:41:06 406

原创 习题练习3: Insert into a Binary Search Tree(二叉搜索树的插入)

题目:Insert into a Binary Search Tree解法一:递归/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : v

2020-07-27 18:13:08 216

原创 习题练习2: Search in a Binary Search Tree

题目: Search in a Binary Search Tree解法一:递归/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {

2020-07-27 15:45:24 198

原创 习题练习1:验证二叉搜索树

题目:验证二叉搜索树解法一:递归/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: bool chec

2020-07-27 15:04:36 153

原创 数据结构与算法6:树的表示法(二叉树的遍历)

树的遍历,是指依照一定的规律不反复地訪问(或取出节点中的信息,或对节点做其它的处理)树中的每个节点,遍历是将非线性的树状结构按一定规律转化为线性结构。1. 多叉树遍历多叉树遍历分为深度优先遍历和广度优先遍历两类。树孩子表示法比较容易遍历。图形演示:visualgo DFS BFS1.1 深度优先遍历(DFS:Depth First Search)深度优先遍历:从根节点开始先沿着树的一个枝遍历到叶子节点,再遍历其他的枝。深度优先遍历又分为先序遍历和后序遍历。1.1.1 先序遍历树中父节点先于

2020-07-26 23:37:42 260

原创 数据结构与算法5:树的表示法

1. 多叉树表示法1.1 双亲表示法表格表示参考代码struct Node{ char data; int parent; };Node nodes[n];优缺点比较容易找到双亲,但是不容易找到孩子。2.2 孩子表示法表格表示参考代码struct Node{ char data; vector<int> children; };Node nodes[n];优缺点比较容易找到孩子,但是不容易找到双

2020-07-26 21:24:40 343

原创 数据结构与算法4:二叉树

1. 什么是树?树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:(1)有且仅有一个特定的称为根(root)的结点。(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,…,Tm, 其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)2. 树的构成2.1 节点分类节点分类特点说明根(root)没有父节点只有子节点的节点叶子(leaf)/终端节点没有子节点或者子节点是空的节

2020-07-26 21:14:08 306

原创 Linux系统编程8:IPC共享内存

0. 共享内存比喻火锅本质多个进程访问同一个逻辑内存直接访问内存,不用read()/write()非常方便1. POSIX 共享内存资料:unpv22e-ch13查看:man shm_overviewls /dev/shm2. 分类内存映射文件内存映射文件注意:共享内存大小 = 文件大小共享内存区对象(非亲缘进程)匿名内存映射(亲缘进程)风格方式BSDMAP_ANON+mmap()Systerm V

2020-07-23 16:53:08 203

原创 Linux系统编程7:IPC消息队列

0. 消息队列背景管道和套接字比较适合两三个进程之间的通信,如果进程成倍增加,管道和套接字的数量也会阶乘级的增加,管理也非常复杂麻烦。于是出现的消息队列本质内核链表1. POSIX 消息队列1.1 查看POSIX消息队列预览:man mq_overview查看POSIX消息队列:ls /dev/mqueuecat /dev/mqueue/PIC名字1.2 接口头文件:mqueue.h库:librt.so(real time)1.3 结构体struct mq

2020-07-23 16:22:34 122

原创 Linux系统编程6:管道

1. 简介查看管道命令:man 7 pipe分类:匿名管道FIFO管道/命名管道2 匿名管道2.1 单工管道程序进程与Shell命令行进程单项通信。2.1.1 参数说明① 打开管道FILE* popen (const char *command, const char *open_mode)参数No.参数含义1command命令行字符串2open_mode"r"只读"w"只写返回值No.参数含义1NUL

2020-07-23 00:45:12 216

原创 Linux系统编程5:进程

1. 程序与进程如果程序是菜谱,进程就是厨师烹饪;如果程序是乐谱,进程就是乐师演奏;如果程序是剑谱,进程就是剑客舞剑;如果程序是棋谱,进程就是棋士复盘;程序是静的,进程是动的。进程与程序区别No.进程程序1动态静态2有生命周期指令集合3只能对应一个程序可以对应多个进程No.进程状态1进程正在处理器运行,这个状态从来木见过.O2休眠状态(sleeping)S3等待运行(runable)R Run

2020-07-22 17:43:30 253

原创 数据结构和算法3:重要的链表

1. 链表是什么?顺序表的缺点添加和删除操作需要移动元素。当数据量特别大的情况,可能没有连续的内存可使用。链表,别名链式存储结构或单链表,用于存储逻辑关系为 “一对一” 的数据。与顺序表不同,链表不限制数据的物理存储状态。顺序表通过连续的地址建立元素之间前后连接关系,链表通过指针方式建立元素之间前后连接关系。2. 链表怎么用?链表用法与顺序表相似,只是适用场景有所不同。3. 链表如何实现3.1 定义结构使用链表存储的数据元素,其物理存储位置是随机的。数据元素随机存储,并通过指针表

2020-07-21 22:37:42 118

原创 Linux系统编程4:I/O复用

背景阻塞IO操作通常IO操作(比如read和write)都是阻塞I/O的,当调用read时,如果没有数据收到,线程或者进程就会被挂起,直到收到数据。阻塞IO.png当服务器处理1000个连接,但是只有很少连接执行IO操作,那么需要1000个线程或进程来处理1000个连接,而1000个线程大部分是被挂起的。线程内存和切换开销由于CPU的核数或超线程数一般都不大,比如4,8,16,32,64,128,比如4个核要跑1000个线程,那么每个线程的时间槽非常短,而线程切换非常频繁。...

2020-07-21 14:39:39 241

原创 Linux系统编程3:Socket编程—网络模型

1. OSI七层模型No.模型功能1物理层比特流传输2数据链路层网络控制、链路纠错3网络层寻址,路由4传输层建立主机端到端的连接5会话层建立、维护和管理会话6表示层格式转化,加密解密7应用层提供应用程序间通信1.1 常见物理层协议No.模型e.g.1串口/COM口RS-232(仪表接口,智能仪表);RS-485(联网仪表接口)2并行/LPT口IEEE1284(打印口,打印机扫描

2020-07-20 18:06:40 142

原创 Linux系统编程2:Socket编程的接口介绍

1. 接口1.1 转换操作转换操作主要分为三类:字节序转换操作、IP地址转换操作和主机名转换操作。1.1.1 字节序转换操作网络序转主机序No.函数含义作用1ntohs()network to host short把unsigned short类型从网络序转换到主机序2ntohl()network to host long把unsigned long类型从网络序转换到主机序主机序转网络序No.函数含义作用1hton

2020-07-20 17:56:47 225

原创 Linux系统编程1:Socket编程的一些概念

1.套接字1.1 什么是socketsocket是一个编程接口socket是一种特殊的文件描述符everything in Unix is a file1.2 协议域domainNo.参数含义1AF_INETIPv42AF_INET6IPv63AF_LOCALUnix域1.3 类型typeNo.类型Type作用说明1流式套接字SOCK_STREAM提供面向连接、可靠的数据传输服务,数据按字节流、按顺序收发

2020-07-19 13:55:44 143

原创 c++进阶6:BOOST库基础

boost安装与使用1. 简介C++的一个准标准库2. 安装在线安装Redhat/Centossudo yum install boost-develUbuntu sudo apt-get install libboost-dev手动安装大部分boost库的头文件主要由模板和内联函数实现,不需要编译成二进制文件。只需要解压即可。...

2020-07-19 13:09:06 133

原创 c++进阶5:动态库与静态库_类

0.前提(文件内容)Point3D.h#ifndef __POINT3D_H#define __POINT3D_H// 定义一个抽象类// 提供纯虚函数接口class IPoint3D{public: virtual void Print() const = 0; virtual ~IPoint3D(){}};// 具体实现类要继承抽象类class Point3D:public IPoint3D{public: int x,y,z; Point

2020-07-18 14:07:00 417

原创 c++进阶4:动态库与静态库_函数

作用分离编译(防止拷贝源码,用二进制文件,直接调用)代码重用分类分类作用后缀静态库一个或多个.o目标文件归档在一个文件中+头文件.a共享库没有main函数的可执行文件.so动态加载库没有main函数的可执行文件,接口复合API.so0.前提(文件内容)1.准备:将原来的array.h,array.cpp拆分成两个文件;array.h, alg.h,array.cpp, alg.cpparray.h #ifndef __ARR.

2020-07-18 13:45:57 326

原创 c++进阶3:Makefile-入门

0. 作用Makefile文件告诉Make怎样编译和连接成一个程序。1. Makefile基本语法与执行1.1 示例1.编译一个单文件HelloWorld.cpp#include <iostream>using namespace std;int main(){ cout << "Hello World" << endl;}编写Makefilevim MakefileHello:Hello.cpp #1.目标 2.源 g++

2020-07-18 12:21:20 255

原创 C++进阶2:重载原理分析

1. 基本原理知识函数重载:在相同作用域中的多个函数,具有相同的名字而形参表不同。不能仅仅基于不同的返回类型而实现函数重载。返回值是不影响函数签名的。C++函数重载底层实现原理是C++利用name mangling(倾轧)技术,来改名函数名,区分参数不同的同名函数。编译器通过函数名和其参数类型识别重载函数。为了保证类型安全的连接(type-safe linkage),编译器用参数个数和参数类型对每一个函数标识符进行专门编码,这个过程有时称为“名字改编”(name mangling)或“名字修饰”(n

2020-07-17 20:32:21 502

原创 C++进阶1:xxxx_cast类型转化

1. 类型转换c语言的转换;(1)隐式转换(从表示范围小的类型转化为范围大的类型)(2) 显示类型转化:强制类型转化; void*v = p; //1.1 隐式转换 p = (int*) v; //1.2显示类型转化;xxx_cast <类型> (表达式)一共有以下四种形式: static_cast,const_cast, dynamic_cast,reinterpret_cast,提供安全性的检测,在代码中更加醒目;1.1. static_cast用于非多态类型之

2020-07-17 17:43:51 340

原创 C++基础17:STL-类型萃取

1.萃取技术如何把数组和容器统一起来;数组:指针;容器:迭代器1.1 功能类型萃取:在STL中用到的比较多,用于判断一个变量是否为POD类型.简述来说可以用来判断出某个变量是内置类型还是自定义类型.通过类型萃取,萃取到变量类型,对不同变量进行不同处理,可以提升程序效率.1.2 应用场景比如我们实现顺序表,在对顺序表进行扩容时,就靠重新开辟内存、拷贝对象.拷贝对象时,就有两种情况:一种是类型,比如int char…;还有一种是自定义类型,Data类、String类.对于内置类型,我们可以通过

2020-07-16 22:17:31 774

原创 C++基础16:智能指针的用法

1. 智能指针的简单应用功能:处理没有释放内存,所引起的内存泄漏的问题;(1)智能指针的初始化类似于容器;auto_ptr<int> ptr(new int(10)); //(1)智能指针的初始化类似于容器;

2020-07-13 14:00:18 307

原创 C++基础15:STL—仿函数

1. 概念模仿函数的类,使用方式如同函数。本质是类中重载括弧运算符operator()。

2020-07-08 19:03:58 285

原创 C++基础14:STL—算法

1.遍历(for_each(),仿函数,lambda函数,全局函数)(1)全局函数在容器中加入,不用带参数;

2020-07-06 11:04:27 225

原创 C++基础13:容器适配器(Container Adapte)

1 简介容器模板特点容器模板特点栈容器stack后进先出(LIFO)队列容器queue先进后出(FIFO)优先级队列容器priority_queue最高优先级元素先出

2020-07-04 11:29:33 196

原创 C++基础12:STL容器map

1. 简介map 是 key-value 构成的集合。

2020-07-03 16:56:02 107

原创 C++基础11:STL容器set

1. 简介1.1 数学中的集合No.特性说明1确定性给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,二者必居其一。2互异性一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。有时需要对同一元素出现多次的情形进行刻画,可以使用多重集。3无序性一个集合中,每个元素的地位都是相同的,元素之间是无序的。集合上可以定义序关系,定义了序关系后,元素之间就可以按照序关系排序。但就集合本身的特性而言,元素之间没有必然的序。1.2 C++中的集

2020-06-05 10:13:55 263

原创 C++基础10:STL容器list

1.基础操作

2020-05-19 14:22:52 130

原创 C++基础9:STL容器vector

0.vector常见用法(1)头文件#include //(1)头文件(2)初始化,没有初始化会吐核。vec[0] = 101; //第一个元素为101; vector<int> vec(10); //10个0; vector<int> vec(10,10);//10个10; vector<int> vec ={1,2,3,4}; //std=c++11;...

2020-05-11 23:49:27 215

原创 C++基础8:简单介绍STL

0. 背景STL是什么?STL(Standard Template Library)标准模板库的英文缩写,包含有计算机科学领域常用的基本数据结构和基本算法。STL与C++标准库的关系版本No.版本作者是否开源特点1HP STL[美]Alexandar Stepanov/[美]Meng Lee是第一个实现版本2SGI STL[美]Alexandar Stepanov是GCC使用版本,源码可读性高3STLport[俄]Boris Fomit

2020-05-10 23:05:35 141

原创 C++基础7:模板编程/泛型编程相关

1. 基本概念

2020-05-04 18:54:43 96

原创 C++基础6:关于异常处理

为什么需要异常?

2020-05-02 23:34:46 297

原创 C++基础5:关于文件操作

1. 流流:数据从一个对象到另一个对象的传输。功能:标准输入输出+文件处理分类含义文本流一串ASCII字符二进制流一串二进制2. 流类型标准库定义了三大类流类型:标准I/O流、文件流、字符串流标准I/O流ios是抽象类ostream是cout、clog、cerr的类istream是cin的类文件流类型ifstream从文件读...

2020-05-01 20:33:00 236

原创 C++基础4:关于多态

1. 定义&功能多态:不同类型对象调用相同接口完成不同的行为。a.问题:同名,同参函数出现同名隐藏,仅仅显示父类Func(c1); //AnimalFunc(c2); //AnimalFunc(d1); //AnimalFunc(d2); //Animal完整案例#include <iostream>using namespace std...

2020-04-28 10:51:26 370

原创 C++基础3:继承

1. 语法原则:is-a父类/子类基类/派生类语法class 派生类 : [访问限定符] 基类 { 成员}

2020-04-19 23:54:55 160

原创 C++基础2(3):类与对象

7. 友元细说作用非成员函数访问类中的私有成员分类全局友元函数:将全局函数声明成友元函数友元成员函数:类的提前引用声明,将一个函数声明为多个类的友元函数友元类:将整个类声明为友元特点友元关系单向性友元关系不可传递...

2020-04-08 11:14:53 291

原创 C++基础2(2):类与对象

4. 方法4.1 构造函数4.1.1. 语法类名(参数){ 函数体}特点在对象被创建时自动执行构造函数的函数名与类名相同没有返回值类型、也没有返回值可以有多个构造函数调用时机对象直接定义创建–构造函数不能被显式调用new动态创建默认构造函数类中没有显式的定义任何构造函数,编译器就会自动为该类型生成默认构造函数,默认构造函数没有参数。构造函数的三个...

2020-03-26 11:13:11 212

原创 数据结构和算法2:顺序表

0. 线性结构数据结构中最常用最简单的结构是线性结构。线性结构,又称线性表。逻辑结构上数据元素之间存在一个对一个的相邻关系。线性结构是n个数据元素的有序(次序)集合,它有下列几个特征:1.集合中必存在唯一的一个"第一个元素";2.集合中必存在唯一的一个"最后的元素";3.除最后元素之外,其它数据元素均有唯一的"后继";4.除第一元素之外,其它数据元素均有唯一的"前驱"。1. 顺序表是...

2020-03-24 23:21:20 109

空空如也

空空如也

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

TA关注的人

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