自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 畅聊系统

一.功能该项目是基于UDP的。实现一个群聊的功能,多个用户给服务器传输数据,服务器会将信息返回到每个人的界面上。二.模块介绍服务端客户端模块:主要实现接收客户端消息以及发送消息给客户端,主要依赖UDP实现。用户管理模块:只有注册登录的人才可以向服务端发送消息,如果已经注册,则将当前用户的状态改为已注册,将当前用户的信息插入到map中,key为注册用户的id,value为其对应的注册信息。...

2020-09-10 23:48:56 344

原创 boost站内搜索引擎

boost文档搜索功能:实现了boost文档站内搜索的功能,通过输入查询词,可以将和整个查询词有关的文档的网页按该词的出现次数先后排序的显示出来,通过点击可直接进入网页进行文档的阅读。项目整体框架一.预处理模块1.首先我们将boost离线文档下载到本地,然后我们会发现,在boost_1_53_0/doc/html这个目录就是我们需要进行处理的目录,在这个目录里,不仅有html文件还有很多其他的我们不需要的文件,所以我们需要进行一个过滤的操作。这里我们直接使用boost库中的filesystem的操

2020-09-10 12:56:25 442

原创 指针&&引用(复习)

一.引用(&)概念:引用是为对象起了另外一个名字,通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名,如:int i=5;int &d=i;。初始化变量时,若定义了引用,那么程序会把引用和他的初始值绑定在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用将和他的初始对象一直绑定在一起,不能改变。所以定义了引用必须进行初始化。1.&:&符号既能作为表达式里的运算符,也能作为声明的一部分出现,符号的上下文决定了他的意义。例如:int val=0;int

2020-08-06 18:19:53 431

原创 剑指offer-圆圈中最后剩下的数(C++实现)

题目描述:每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!_)。请你试着想下,哪个小朋友会得

2020-08-03 10:19:20 137

原创 剑指offer-翻转链表(输出新链表的表头)

class Solution {public: ListNode* ReverseList(ListNode* pHead) { if(pHead==NULL) return NULL; ListNode* pre=NULL; ListNode* Next=NULL; while(pHead!=NULL) { Next=pHead->next;//:将Next职位p

2020-07-31 23:31:54 103

原创 剑指offer-左旋转字符串

题目描述:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它解题思路:既然是左旋转,我们可以把要旋转的字符放在一个字符串里,然后把其他的放在另一个字符串里,然后一拼接就可以了class Solution {public: string LeftRotateSt

2020-07-31 23:06:21 82

原创 剑指offer-和为S的连续正数序列(c++实现)

题目描述:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!解题思路:滑动窗口思想。首先我们可以定义两个指针,例如int i=0;int j=1;然后我们判断这两个数的和跟S的大小关系,如果相等,那么这两个数就是和为

2020-07-30 13:20:09 139

原创 剑指offer-和为S的两个数字(C++实现)

题目:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的解题思路:首先题目告诉了我们这是一个递增的数列,其次让我们求两个数的乘积最小的。我们知道和相同的两个数,他们相差越大,那么他们的积就越小。我们知道这是一个递增的数列,所以我们可以想到从两边开始找,我们可以定义两个指针分别指向数组的两边。如果他们的和大于S,则说明数大了则右边的指针–,如果和小于S,则说明数小了,则左边的指针++,直到左边和右边的指针重叠时,跳出循环class

2020-07-30 12:16:08 112

原创 剑指offer-数组中出现一次的数字

题:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字解析思路:该题说一个数组中除了两个数字外,其他都出现了两次。那么我们想,如果只有一个数字出现了一次,其他都两次,我们会怎么做?很简单,将数组中每个元素都异或起来,那么只出现一次的那个数就出来了。那么这道题我们可以这么做吗?答案是肯定的,但是需要进行分组,就是把这个数组分成两个数组,每个数组中只有一个数出现了一次,其他都两次。那么我们如何进行分组呢?我们知道,将所有数都异或起来,最后得到的是只出现一次的那两个数

2020-07-26 21:08:06 69

原创 C/C++内存管理

一.首先我们根据一张图来看看C/C++中的内存分布。(图画的有点丑不要介意)由此图我们可以看出,全局数据和静态数据存放在数据段,局部数据存放在栈上。而我们动态分配的数据便存在堆上。二.C语言中的动态内存管理方式。1.mallocvoid* malloc(size_t size)malloc函数向内存申请一块连续可用的空间,成功则返回指向这片空间的指针,失败返回空,所以在使用malloc时我们一定要做检查(判断是否为空)2.callocvoid* calloc(size_t num,size

2020-07-21 18:34:44 96

原创 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。

题目描述:可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。思路:求出每一个数的1的个数,然后相加class Solution {public: int NumberOf1Between1AndN_Solution(int n) { int c=0; for(int i=1;i<=n;i++)//:这是1到n,区间可以任意改 { c+=is1(i); } return c;

2020-07-17 19:17:39 163

原创 输入一棵树,判断该二叉树是否为平衡二叉树(只考虑其平衡性)

平衡二叉树:它是一棵空树或者他的所有节点的左右子树高度差小于等于1。解题思路:如果是空树,那么他就是平衡二叉树。如果不是空树,则判断他的左子树是否为平衡二叉树,然后判断右子树是否为平衡二叉树,然后在判断自己是不是平衡二叉树。(主要就是判断高度差)class Solution {public: bool IsBalanced_Solution(TreeNode* pRoot) { if(pRoot==nullptr)//:若为空则为平衡二叉树 {return tr

2020-07-17 18:57:17 187

原创 网络编程套接字(详细)

一.IP地址和目的IP地址在IP数据包头部,有两个IP地址,一个是源IP地址,一个是目的IP地址二.端口号1.端口号是一个2字节16位的整数2.端口号是用来标识一个进程,告诉操作系统当前的数据需要交给哪一个进程来处理。3.ip地址和端口号可以标识一台主机的某一个进程。4.一个端口号只能被一个进程占用三.什么是TCP和UDP协议?TCP协议:有连接, 可靠传输,面向字节流UDP协议:无连接,不可靠传输,面向数据报二者均为传输层协议。四.网络字节序1.网络数据流当中同样有大端和小端之分。

2020-07-15 14:02:35 506

原创 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法

给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法解题思路:此题意思是在数组b中b[i]的值为数组A中除去A[i]其余元素的乘积class Solution {public: vector<int> multiply(const vector<int>& A) { vector<int> b;

2020-06-16 19:16:09 250

原创 剑指offer-数组中出现次数超过一半的数字

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路:如果数字出现的次数超过了数组长度的一半,那么这个数字肯定是这组数的中位数,那么我们可以给这组数先排序,然后找到中位数。然后对数组进行遍历,如遇到等于中位数的,则计数器加1,最后再判断计数器的值是否大于数组的一半,如果大于,则返回这个中位数,如果不是则返回0class Solution {p

2020-06-09 19:05:23 73

原创 剑指offer-跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。class Solution {public: int jumpFloor(int number) { int count=0; if(number<=2)//:当台阶数小于等于2时,就有number种跳法 return number; int pre1=2;//:两阶时 int pre

2020-06-09 18:44:36 65

原创 剑指offer-不用+,-,*,/做加法

解题思路:位运算1.先对num1和num2做异或操作得到没有进位的值2.对num1和num2做与运算,并将结果左移移位,得到进位值。3.循环进行1,2步,直到进位为0,也就是num2=0;class Solution {public: int Add(int num1, int num2) { while(num2!=0)//:进位为0时 { int a=num1^num2;//:二者异或得到没有进位的值

2020-06-09 18:38:48 75

原创 圆括号匹配

#include<iostream>#include<string>#include<stack>using namespace std;bool chkParenthesis(string str, int n) { std::stack<char> a; for (int i = 0; i<n; i++) { if (str[i] == '(')//遍历字符串,当遇到(时将其压入站中 { a.push(str[i]);

2020-06-08 18:16:28 235

原创 Linux之进程间通信

一.目的由于每一个进程都拥有自己自己独立的虚拟地址空间,促使了进程独立,导致了进程之间相互协作工作的问题二.管道一个进程连接到另一个进程的数据流称为管道,管道就是内核当中的一块内存,相当于内核为进程间通信而创建的缓冲区。1.匿名管道:匿名管道是一个半双工,数据的流向只能是一个流向,提供字节流服务的.如果读端没有来得及读而写端往进去写了,现在写的数据就会追加在之前写的数据后面。当读端读数据时,是直接将数据从管道中拿走了,而不是还存在于管道中创建一个匿名管道:int pipe(int fd[2]),f

2020-06-06 17:34:20 113

原创 剑指offer-求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)

class Solution {public: int Sum_Solution(int n) { int sum=n; sum!=0&&(sum=n+Sum_Solution(n-1)); return sum; }};

2020-05-24 19:56:42 128

原创 变态跳台阶

class Solution {public: int jumpFloorII(int n) { if(n==1) return 1; if(n==2) return 2; if(n>2) return 2*jumpFloorII(n-1); }};

2020-05-24 19:54:58 56

原创 用两个栈实现队列

class Solution{public: void push(int node) { stack1.push(node); } int pop() { int r; if(stack2.size()>0) { r=stack2.top(); stack2.pop(); } else if(stack1.s

2020-05-24 19:53:40 85

原创 二维数组中的查找

class Solution {public: bool Find(int target, vector<vector<int> > array) { int size=array.size(); if(size!=0) { int row=size-1; int col=0; while(row>=0&&col<array[0].size()

2020-05-24 19:52:09 80

原创 从尾到头打印链表

这个问题可以利用栈的特性来做。先将链表的各数据压入栈里,然后出栈存在数组里。class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { stack<int> arr; vector<int> arr2; ListNode *p=head; while(p!=NULL) {

2020-05-24 19:48:18 57

原创 AVL树

一.概念当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。他的左右子树都是AVL树左右子树平衡因子的绝对值不能超过1;如果一棵二叉搜索树是高度平衡的,它就是AVL树。二.AVL树的旋转1.为什么要进行旋转?如果在一棵原本是平衡的AVL树中插入一个新节点,可能造成不平衡,此时必须调整树...

2020-04-11 13:20:05 89

原创 二叉搜索树

一.概念最优情况下,二叉搜索树为完全二叉树,其平均比较次数为log2N,最差情况下二叉搜索树退化为为单边树,其平均比较次数为N/2。二叉搜索树又称二叉排序树,它可以是一棵空树,也可以是具有下面一些性质的数1.若左子树不为空,则左子树上的所有节点的值都小于根节点的值。2.若右子数不为空,则右子树上的所有节点的值都大于根节点的值。3.左右子树也分别为二叉搜索树。二.二叉搜索树的查找若不为空...

2020-04-07 11:54:45 946

原创 替换空格

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。class Solution {public: void replaceSpace(char *str,int length) { int count=0; for(int i=0;i<length...

2020-04-02 20:12:04 59

原创 多态性

一.概念:去完成某个行为,当不同的对象去完成时会产生不同的状态。二.双目运算符重载为成员函数1.定义形式函数类型 operator 运算符(形参){}参数个数等于原操作数-1(后置++,–除外)2.双目运算符重载规则若要重载B为类成员函数,使之能够实现表达式oprd1 B oprd2,其中oprd1为A类的对象,则B应该被重载为A类成员函数,形参类型应该是oprd2所属的类型。经...

2020-03-20 16:05:30 80

原创 c++继承详细总结

一.概念继承是面向对象程序中使代码可以复用的重要手段,他允许程序员在原有类的基础上进行扩展开辟新的功能。通过继承联系在一起的类构成一种层次关系。通常在层次关系的根部有一个基类,其他类则直接或间接的从基类继承而来,这样的类称为派生类。单继承时派生类的定义class base1//:基类{ //:成员声明};class base2 :public base1//:派生类,继承方式publ...

2020-03-15 15:44:05 135

原创 string类及其简单模拟实现

一.string类1.string是表示字符串的类。该类的接口与常规容器基本相同,再添加了一些专门用来操作字符串的操作。二.string类常见的对象构造1.string():构造空的字符串。2.string(const char *s):用c-string来构造string类对象3.string (const string &s):拷贝构造函数三.string类常用操作1.s...

2020-03-13 15:35:14 248

原创 类和对象相关知识

一.构造函数1.作用:在对象被创建时使用特定的值构造对象,将对象初始化为一个特定的状态。如果程序中为定义构造函数,则编译器会生成一个默认的构造函数。如果程序中创建了构造函数,但仍希望编译器隐含生成默认构造函数,可以使用=default。调用时机:在对象被创建时自动调用例:创建一个Clock的类对象#define _CRT_SECURE_NO_WARNINGS 1#include<...

2020-03-11 12:35:24 114

原创 常见的排序算法(快排,归并,插入等)

一.冒泡排序基本思想:每次比较数组中相邻两个数的大小,将较小的数放在大的前面void BubbleSort(int *a, int n){ int i, j,k; for (i = 0; i < n; i++) { for (j = n - 1; j >=i; j--) { if (a[j] < a[j - 1]) { k = a[j];...

2020-03-07 20:58:44 129

原创 二叉树及其创建和前中后序遍历

一.树基本知识点1.树是一个非线性结构,它由多个节点组成一个具有层次关系的集合。每个节点具有零个或多个子节点,没有父节点的节点称为根节点,每个根节点只有一个父节点。2.度:一个节点的子节点个数称为该节点的度。3.非终端节点或分支节点:度不为0的节点。4.父节点:若一个节点含有子节点,则该节点为子节点的父节点。5.树的度:一棵树中,最大的节点的度称为树的度。6.节点的层次:从根节点算起为...

2020-03-04 19:54:27 341 1

原创 队列的基本操作

一.定义队列是一个具有一定操作约束的线性表。只能在表的一端进行插入操作,称之为对头;在表的另一端进行删除操作,称之为队尾;二.类型定义typedef struct QUEUE{ int rare;//:队尾指针 int front;//:队头指针 ElemType *data;//:数据域}Queue;二.初始化Queue *InitQueue(Queue *Q){ ...

2020-03-02 21:51:07 148

原创 顺序栈的基本操作

一.栈的定义栈是限定在表的同一端进行插入或删除的线性表,进行插入或删除的一端为栈顶,另一端为栈底,没有数据元素的栈称为空栈,插入数据元素的操作为入栈,删除数据元素的操作为出栈。栈具有后进先出的特性。一.栈的类型定义typedef struct stack{ ElemType data[MAXSIZE];//:用一个数组来存放元素 ElemType top;//:栈顶位置 int ...

2020-03-01 18:52:51 234

原创 链表及其基本操作

一.链表的定义链表是一种物理存储结构上的非顺序,非连续的存储结构,数据元素的逻辑顺序是通过链表上的指针链接次序来实现的。其中的各对象按线性顺序排列的,链表的顺序由各个对象的指针决定的。二.单链表1.用一组地址任意的存储单元来存放线性表的数据元素。数据域+指针域==节点,用节点的序列表示线性表称作链表。线性表的第一个元素a1的地址称为头指针。2.类型定义`typedef struct ...

2020-02-28 15:23:14 200 1

原创 顺序表的基本操作

顺序表:利用数组的连续存储空间顺序存放线性表的各元素1.初始化List Empty(){ List PtrL; PtrL = (List)malloc(sizeof(struct LNode)); PtrL->Last = -1;}2.查找int Find(ElementType x, List PtrL){ int i = 0; while (i <= Pt...

2020-02-22 14:13:14 115

原创 c++类与对象1

一.类的引用在c语言中结构体可以用来定义变量,在c++中结构体不仅可以用来定义变量也可以定义函数,在c++中struct常用class来代替。1.struct书写最好按大小顺序。2.c语言中不允许空结构体而c++允许,且分配一个字节。“结构体”在c和c++中的区别:1.在cpp中,用结构体定义变量不需要加struct,而c中不行。2.c语言中不允许空结构体;c++允许,且分配一个字节。...

2019-11-18 22:37:48 74

原创 unsigned int reverse_bit(unsigned int value); 这个函数的返回值是value的二进制位模式从左到右翻转后的值

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<math.h>unsigned int reverse_bit(unsigned int value){ int arr[32] = { 0 }; int i = 0; unsigned int...

2019-10-07 00:56:08 115

原创 杨辉三角

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>void YangH(int arr[][6],int rol,int col){ int i; int j; for (i = 0; i <= rol; i++) { for (j = 0; j <= i; j++) { if (j == 0 |...

2019-10-02 17:28:58 56

空空如也

空空如也

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

TA关注的人

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