自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 已知先序遍历序列和中序遍历序列,求后序遍历序列

回顾一下二叉树的三种遍历 先序: 根->左->右 中序:左->根->右 后序:左->右->根 只要我们知道中序和先序或着后序 那么我们就可以根据已知的两种遍历序列 求出剩下的另一种遍历序列 例:已知该二叉树的先序遍历序列为:A-B-D-E-G-C-F,中序遍历序列为:D-B-G-E-A-C...

2018-09-07 12:49:27 11699 2

原创 剑指offer面试题:求二叉树的镜像

题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像二叉树的结点定义如下:struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x) , left(NULL) , right(NULL) {}};...

2018-09-04 10:08:30 234

原创 二叉树的简单实现

二叉树是常见的数据结构掌握它还是很有必要滴#pragma oncetemplate<class T>struct BinaryTreeNode{ T _data; BinaryTreeNode<T>* _left; BinaryTreeNode<T>* _right; BinaryTreeNode(con...

2018-08-27 10:23:39 281

原创 队列和栈的相关面试题

1.实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)//思路:这里我们需要两个栈s1 s2 一个正常存入数据一个只存入小的数据//就比如说 第一个数据先入两个栈 然后插入第二个数据时 先和s2的栈顶数据//比较 如果小的话就分别插入到s1 s2中 如果大的话就只插到s1中#include<iostream>#inc...

2018-08-26 10:25:02 583

原创 链表面试题(二)

1.判断单链表是否带环?//判断是否带环 我们可以用快慢指针思想 我们来两个指针一个 一个每次走一步 //一个每次走两步 如果不带环那么它两走到最后是不会碰面的 反之 如果带环//那么它们迟早会碰面 ListNode* HaveLoop(ListNode* phead){ if(pHead==NULL) return NULL; ...

2018-08-23 15:16:39 171

原创 链表面试题

1.比较顺序表和链表的优缺点,说说它们分别在什么场景下使用? 链表是一种动态的数据结构,因为在创建链表时,我们不需要知道链表的长度,当插入一个结点时,只需要为该结点分配内存,然后调整指针的指向来确保新结点被连接到链表中。所以,它不像顺序表,内存是一次性分配完毕的,而是每添加一个结点分配一次内存。正是因为这点,所以它没有闲置的内存,比起顺序表,空间效率更高。 顺序表 :两大问题...

2018-08-21 22:42:15 204

原创 二叉树的先序、中序、后序、层序遍历

Binary Tree Preorder Traversal 二叉树的先序遍历//先序遍历 先根 后左 其次是右/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x...

2018-08-20 14:11:53 292

原创 字符串中找出连续最长的数字串

#include<iostream>#include<string>using namespace std;int main(){ string str; str.resize(255); scanf("%s",&str[0]); //cin>>str; if(str.length()>255...

2018-08-15 21:49:58 799

原创 C++的异常处理机制

写出一个bug的程序,是每个程序猿的美好期望,但是现实总是很残酷,我曾听到过一句话—–大多数程序猿往往花三分之一的时间写程序,剩下的三分之二用于修bug,那么怎样我们在程序发生错误的时候如何快速定位到错误代码区,从而解决错误这就要用的异常处理机制了。异常处理 当一个函数发现自己无法处理的错误时抛出异常,让函数的调用者直接或 间接的处理这个问题异常分类 编译错误:...

2018-08-14 12:25:03 323

原创 网络基础---OSI七层模型与TCP/IP四层模型

OSI模型,即开放式通信系统互联参考模型(Open System Interconnection,OSI/RM,Open Systems Interconnection Reference Model),是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互连为网络的标准框架,简称OSIOSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输; ...

2018-08-13 22:08:53 255

原创 模拟实现itoa

itoa将任意类型的数字转换为字符串。在< stdlib.h >中与之有相反功能的函数是atoi。 函数原型: char*itoa(int value,char*string,int radix); nt value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等简单实现c...

2018-08-12 11:57:22 729

原创 网络基础---TCP协调中的三次握手四次挥手

TCP全称为 “传输控制协议(Transmission Control Protocol”). 人如其名, 要对数据的传输进行一个详细的控制 TCP,面向有连接的通讯协议,在传送数据之前必须先建立连接,数据传送完成后要释放连接,正因如此才成就了它的可靠性,今天我们就来剖析它通讯的具体过程。 TCP协议段格式 图片出处http://blog.csdn.net/guy...

2018-08-10 18:52:55 209

原创 C++(浅析)智能指针

c++中我们常常使用运算符new和delete来分配和释放动态内存,然而动态内存的管理非常容易出错 使用new 和delete 管理内存存在三个常见问题: 1.忘记delete(释放) 内存。(或者异常导致程序过早退出,没有执行 delete)忘记释放动态内存会导致人们常说的 内存泄露 问题,你申请了内存而为归还给操作系统长时间这样会导致系统内存越来越小。 (内存泄露问...

2018-08-06 19:17:41 271

原创 模拟实现atoi

//atoi函数的简单实现//函数用途:将字符串转为整形//函数原型 int atoi(const char* str)//遇到非数字或字符串结束符('\0')才结束转换,并将结果返回。#include<iostream>using namespace std;//考虑溢出 如果转化数字超过int范围 //int占用4字节,32比特,数据范围为-2147483648~2...

2018-08-04 11:30:51 237

原创 C++ 模板

模板是泛型编程的基础,泛型编程就是编写 一些与类型无关的逻辑代码,达到代码通用复用的目的。 举个例子:我们要实现一个加法函数,但是函数的参数不确定 有可能是int 也有可能是double 还有可能是char 等等 有的人可能会想用函数重载来实现 但你想想你要把所有可能出现的类型都写一遍这未免也太麻烦了 而且万一函数逻辑有问题 那么所哟函数都可能要修改,这复用率有丶低昂。 但是用模板...

2018-08-04 09:51:10 176

转载 c++多态基础知识点

多态基础知识点什么是多态 答:多态是面向对象的重要特性之一,它是一种行为的封装,是同一种事物所表现出的多种形态,简单地说是”一个接口多种实现“多态的作用 答:多态技术允许将父类设置成和他的一个或更多的子对象相等。多态的分类 答:有两种类型的多态性:编译时的多态性。编译时的多态性是通过重载来实现的...

2018-08-02 10:08:04 398

原创 (浅谈)c++强制类型转换

c++语言强制类型转化类型分为四种:static_cast const_cast reinterpret_cast dynamic_cast static_cast (静态转化)用于数据类型的强制转换,强制将一种数据类型转换为另一种数据类型。(int 和 char short double ) 不能用于两个不相关的类型之间的转换(int 和 int*) (1)用于类层...

2018-07-28 17:49:34 423

原创 c++string 类的简单实现(增删查改功能)

能够准确无误地编写出String类的构造函数、拷贝构造函数、赋值函数和析构函 数的面试者至少已经具备了C++基本功的60%以上!在这个类中包括了指针类成员变量m_data,当类中包括指针类成员变量时,一定要重载其拷贝构造函数、赋值函数和析构函数,这既是对C++程序员的基本要求,也是《Effective C++》中特别强调的条款。仔细学习这个类,特别注意加注释的得分点和加分点的意义,这样...

2018-07-28 10:20:09 770

原创 C++日期类的简单实现

日期类主要功能 给定任意日期可以对该日期进行加或减上响相应的天数后得到新的日期 或者给定你两个日期算出两个日期之间相差的天数代码实现:#include<assert.h>#include<iostream>using namespace std;class Date { public: Date(int yea...

2018-06-06 17:09:58 520

原创 数据结构--常用排序算法

排序算法的稳定性的定义 例如一组未被排序的数中{B,A1,D,C,A2}存在一对或多对相同的数 据A1,A2排序前A1的位置在A2前面,如果使用排序算法后A1,A2的相 对位置保持不变{A1,A2,B,C,D},那么我们称这个算法是稳定的。注:排序算法是否为稳定的是由具体算法决定的,不稳定的算法在某种条件下可以变为稳定的算法,而稳定的算...

2018-06-01 15:52:08 493

原创 Linux---守护进程

2018-05-09 15:52:49 190

原创 Linux-线程相关操作

什么是线程? 在一个程序里的一个执行路线就叫做线程,线程是进程的一个实体,是CPU调度和分配的基本单位,它是比进程更小的可以独立运行的基本单位。一切进程至少都有一个线程。 线程与进程 进程是资源竞争的基本单位 线程是程序执行的最小单位 一个线程可以与所属进程内其他线程的共享进程资源 线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器,栈...

2018-04-15 16:12:25 771

原创 进程间通信之信号量

什么是信号量? 信号量的本质是一种数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信,它本身只是一种外部资源的标识。信号量主要用于同步和互斥。 信号量的操作 当请求一个使用信号量来表示的资源时,进程需要先读取信号量的值来判断资源是否可用:大于0,资源可以请求,将信号量的值-1(P操作);等于0,无资源可用,进程会进入睡眠状态直...

2018-04-08 20:59:18 900

原创 进程间通信之共享内存

什么是共享内存?共享内存是被多个进程共享的一部分物理内存。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。 注:页表是一种数组结构,存放着各个虚拟页的状态,是否映射,是否缓存. 进程要知道那些内存地址上的数据在物理内存上,那些不在,还有物理内存上的哪里需要用页表来记录. 页表的每一个表项分为两部分,第一部分记...

2018-03-29 11:33:19 1101

原创 进程间通信之消息队列

什么是消息队列?通俗来讲就是内核提供了一个链表,基于这个链表实现了一个有类型的队列。消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。消息队列的特点1.可作用与任意进程 2.自带...

2018-03-26 18:18:57 834

原创 进程间通信之匿名命名管道

为什么要有进程间通信通信机制?操作系统中,进程间是相互不可见的。操作系统在逻辑上将每个进程隔离开了。一个进程里是不可能看到真实的物理内存地址的。进程间的内存相互隔绝,操作系统这样做就是防止进程间的相互干扰,但是在一些具体的应用情况下需要多个进行相互配合,不同的进程需要进行信息的交互和状态的传递等,因此才会出现各种各样的通信机制。 比如内存映射文件,管道,邮槽等。注: 通信目的数据传输 ...

2018-03-21 18:35:25 666

原创 C语言简要总结

不是很完善,希望大家指出其他重要的知识点 谢谢!

2018-02-06 18:10:38 1385

原创 模拟实现c库函数strcpy,strcat,strstr,strcmp,memcpy,memmove

目录strcpystrcatstrstrstrcmpmemcpymemmovestrcpystrcpy是字符串复制函数,把从src(源字符串指针)地址开始且含有’\0’结束符的字符串复制到以dst(目的字符串指针)开始的地址空间。 注意:在进行复制时是连字符串结束标识符‘\0’一并复制。 只能拷贝字符串char * My_strcpy(ch

2018-01-30 15:53:07 1109

原创 Linux下实现进度条程序的简单实现

1.进度条: 进度条即计算机在处理任务时,实时的,以图片形式显示处理任务的速度,完成度,剩余未完成任务量的大小,和可能需要处理时间,一般以长方形条状显示。 产生进度条的元素: 1.一个不断向右增长的容器,可以直观看出当前的进度。 “%md”,预宽为m,右对齐,”%-md”,左对齐 2.一个反应进度的百分比,在这里用到转义字符”%%”或者”\%”,都代

2017-11-25 16:12:18 1788

原创 Linux基础命令

目录常用指令系统管理命令关机重启机器vim文件权限管理Linux下的重要目录———————————————————————————————————常用指令 指令 解释 ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all) mkdir 创建目录 -p 创建目录,若无父目录,则创建p

2017-11-15 14:28:40 263

转载 VS2013常用快捷键

1.回到上一个光标位置/前进到下一个光标位置 1)回到上一个光标位置:使用组合键“Ctrl + -”; 2)前进到下一个光标位置:“Ctrl + Shift + - ”。 2.复制/剪切/删除整行代码 1)如果你想复制一整行代码,只需将光标移至该行,再使用组合键“Ctrl+C”来完成复制操作,而无需选择整行。 2)如果你想剪切一整行代码,只需将光标移至该行,再使用组合键“Ctrl

2017-08-31 16:28:59 265

原创 顺序表的简单实现

#include<iostream>#include<assert.h>using namespace std;typedef int DataType;class SeqList{public: SeqList() : _array(NULL) , _size(0) , _capacity(0) {} SeqList

2017-08-08 11:37:13 286

原创 解析C++中为什么模板不支持分离编译?

在C++中,我们通常把代码归为三类:声明文件( test.h )、实现文件( test.cpp )、测试文件( main.cpp )。 列:用C++实现一个链表,那么就会创建以上3个文件: 链表的一般写法是没有问题的 如果,通过类模板来实现链表,编译器就会报错 这是因为编译SeqList< T >时没有实例化出SeqList< int >所以链接时出错。 模板第一次编译是在实例化之

2017-08-03 23:04:33 371

原创 双向链表的简单实现丶

#include<iostream>#include<assert.h>using namespace std;typedef int DataType;struct ListNode{ ListNode* _next; ListNode* _prev; DataType _data; ListNode(DataType x) :_next(NU

2017-08-03 18:24:41 238

原创 有关多态的那点事丶

1.什么是多态 ? 所谓多态性就是不同对象收到相同的消息时,产生不同的动作。直观来说,多态性是指用一个名字定义不同的函数,这些函数执行不同但又类似的操作,从而可以使用相同的方式来调用这些具有不同功能的同名函数。简单的说:就是用基类的引用指向子类的对象。 多态的分类: 编译时的多态性。编译时的多态性是通过重载来实现的。 运行时的多态性。运行时的多态性是通过虚成员实现的。 实现多态的方法:虚函

2017-07-31 11:36:17 391

原创 有关继承的那点事丶

所谓继承,就是从先辈得到的属性和行为特征。类的继承就是新的类从已有类那里得到已有的特征。从另一个角度来看问题,从已有类产生新类的过程就是类的派生。类的继承和派生机制使程序员无须修改已有的类,只需在已有类的基础上,通过增加少量代码或者修改少量代码的方法得到新类,从而较好地解决代码重用的问题。 继承又分为:单继承丶多继承和菱形继承 单继承:一个子类只有一个直接父类时称这个继承关系为单继承。 多继承

2017-07-23 23:10:48 347

原创 有关深浅丶写时拷贝的那点事

1.所谓浅拷贝,就是由默认的拷贝构造函数实现的数据成员逐一赋值。通常默认的拷贝构造函数是能够胜任此工作的,但若是类中含有指针类型的数据,这种按数据成员逐一赋值的方法将会产生错误。 有关浅拷贝的例子:class sudent{public: student(char*name1,float scdre1); ~student();private: char *name; flo

2017-07-19 18:58:15 490

原创 c/c++动态内存管理

1 : malloc/free和new/delete之间关系和差异。 相同点: (1)都是申请内存,释放内存,free和delete可以释放NULL指针; (2)都必须配对使用,这里的配对使用,可不能理解为一个new/malloc就对应一个delete/free,而是指在作用域内,new/malloc所申请的内存,必须被有效释放,否则将会导致内存泄露。 new/delete的功

2017-07-16 10:45:40 244

原创 类和对象

1 类和对象的基础知识 ******************************************** 对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型,其定义为: class 类名{}它们的关系是,对象是类的实例。 类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例,拥有类的成员变量

2017-06-26 11:07:12 293

原创 C++基础知识介绍

1.名字空间 ************************************************************** 命名空间是用来组织和重用代码的。如同名字一样的意思,NameSpace(名字空间),之所以出来这样一个东西,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象,对于库来说,这个问题尤其严重,如果两个人写的库文件中出现同名的变量或

2017-06-19 16:57:43 521

空空如也

空空如也

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

TA关注的人

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