自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (2)
  • 收藏
  • 关注

转载 抽象类与接口的区别

来自:http://www.360doc.com/userhome/1039473 一、抽象类:      抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它...

2018-09-19 16:50:55 202

原创 今日头条笔试题

#include <iostream>#include <vector>using namespace std;int main(){ int n, x, num; cin >> n >> x; vector<int> house; for (int i=0; i<n; i++){ cin >> num; house.push_ba

2017-10-17 22:23:59 562

原创 翻转打印字符串分词,比如“this is a dog” 输出“dog a is this”

比如“this is a dog” 输出“dog a is this”

2017-09-23 20:48:03 795

原创 沿对角线打印数组(任意二维数组)

#include <iostream>using namespace std;void myPrint(int arr[][4], int row, int col) //注意括号里是数组列数{ //输出上半角 for (int i=0; i<col; i++) { int m = 0; for (int j=i; j>=0 && m<ro

2017-09-21 02:13:11 625

原创 模拟实现stlen,strcmp,strcat, strcpy, strncat, strncpy

/////////////////////////////////////////////////////////// 模拟实现stlen,strcmp,strcat, strcpy, strncat, strncpy//////////////////////////////////////////////////////////////////////////#include <iostr

2017-09-18 23:18:18 523

原创 struct sockaddr,struct sockaddr_in, struct in_addr

一、结构体 struct sockaddr, struct sockaddr_in, struct in_addr这是网络编程中常用的结构体,为方便以后的查看,总结如下。 struct sockaddr { unsigned short sa_family; /* 地址族, AF_xxx */ char sa_data[14]; /* 14字节的协议地址*/ };上面是通用的sock

2017-09-10 12:22:34 636

原创 select,poll,epoll总结

select的几大缺点:(1)每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大(2)同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大(3)select支持的文件描述符数量太小了,默认是1024poll的实现和select非常相似,只是描述fd集合的方式不同,poll使用pollfd结构而不是select的fd_set结构,其

2017-09-09 13:59:37 212

原创 文本文件与二进制文件

一、定义 大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是编码层次上有差异。简单说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(可看作是自定义编码)。文本文件基本上是定长编码的(也有非定长的编码如UTF-8)。而二进制文件

2017-09-03 21:41:35 247

原创 迷宫矩阵(最优路径算法)

走出迷宫可以使用递归或者栈的方式,这里采用的是栈的方法,迷宫的矩阵如图,1是墙壁,0是路1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 1 0 1 1 1 1 1 1 0 1 1 0

2017-08-24 17:21:35 4325

原创 判断一颗二叉树是是否是另一颗树的子树。比如tree2是tree1的子树

先在Tree1中找到与Tree2根节点相同的结点,然后将此节点当做根节点判断是否与Tree2树结构相同

2017-08-24 00:21:42 476

原创 判断一个节点是否在一棵二叉树中

#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>using namespace std;//结点template <typename T>struct TreeNode { T _data; TreeNode *_left; TreeNode *_right; TreeNode(const T& data)

2017-08-24 00:12:20 405 1

原创 已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。

已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},完成计算后A={10,20,30}。

2017-08-23 14:56:27 324

原创 二叉树的前/中/后 序遍历(递归非递归两种)

一.前序遍历前序遍历按照“根结点-左孩子-右孩子”的顺序进行访问。1.递归实现void pre_order(BTree *root) 2.{ 3. if(root != NULL)//必不可少的条件,递归的出口 4. { 5. printf("%2c",root->key); //访问根结点6. pre_order(

2017-08-23 14:37:45 206

原创 一个m*n的矩阵,从左到右从上到下都是递增的,给一个数x,判断x是否在矩阵中。(高效率)

这样的矩阵可以使用一个二维数组存储,知道了矩阵的特点,选取一个元素时可以将矩阵分区 可以看到随意选一个元素的话会分成四个区域,阴影部分是可能的区域,深色的是确定比要查找的大或者小,浅色阴影是有可能,所以下一步的动作很难确定,因此,随意取一个点进行比较然后跟进的方式会很麻烦。 从特殊位置的点下手这个问题就变得简单了,右上和左下这两个点拿来比较要找的元素就很好处理,这里采用取右上元素的方式(两种思想

2017-07-28 19:52:38 2995

原创 -判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像

判断一棵二叉树是否是平衡二叉树任意给定一棵二叉树,判断它是否是平衡二叉树。所谓平衡二叉树,是指二叉树中任意一个结点的左右子树的高度之差不超过1可以分两步实现。第一步先实现求解 二叉树中每个结点的高度的函数height(BinaryNode );然后先序遍历二叉树中的每一个结点node,调用height()求出该结点的左子树高度height(node.left) 和 右子树高度 height(node

2017-07-27 20:51:10 199

原创 链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6

链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6,用程序实现Node* RotateList(Node* list, size_t k). 提示:这个题是链表逆置的升级变型。首先理解题意,即将链表分段逆置,每段k个结点,不够k个不逆置pNode* RotateList

2017-07-27 17:45:16 994

原创 求二叉树的高度/销毁一颗二叉树-->Destroy(Node* root)

int HeightOfBinatyTree1(BinaryTreeNode* pRoot) //二叉树的高度{ if (pRoot == NULL) return 0; int m = HeightOfBinatyTree1(pRoot->_pLeft); int n = HeightOfBinatyTree1(pRoot->_pRight);

2017-07-27 17:39:07 381

原创 求二叉树的高度

这里计算二叉树的高度采用三种不同的算法。 算法一:后序遍历二叉树,结点最大栈长即为二叉树的高度; 算法二:层次遍历二叉树,最大层次即为二叉树的高度; 算法三:采用递归算法,求二叉树的高度。 //法1:后序遍历,结点最大栈长即为树的高度 //法2:层次遍历,层次即为高度 //法3:递归算法求树高#include<iostream> #include<stack> #include<

2017-07-26 19:43:26 2201 1

原创 找出数组出现次数超过一半的数

例如: 数组{1,2,3,4,1,1,2,1,1}中1出现了5次超过长度9的一半。因此输出1; 注:这里没有考虑出现次数最多的数字是0的情况,关键在于方法这里给出两种常用方法:解法一:基于排序(快排)的算法这种算法优点在于理解起来比较容易,如果一个数出现次数超过长度的一半,那将数组排序之后位于数组中间位置的数一定就是要找到的数。 注:需要检测一下中间的数是否是超过一半的数,因为有可能出现次数最

2017-07-26 15:57:58 323

原创 求二叉树叶子节点的个数/求二叉树第k层的节点个数

int FindLeavesOfBinaryTree(BinaryTreeNode* pRoot) //求二叉树叶子结点的个数{ if (pRoot == NULL) return 0; if (pRoot->_pLeft == NULL && pRoot->_pRight == NULL) return 1; return FindLeaves

2017-07-24 21:33:55 950

原创 判断N!末尾有多少个0

问题:N的阶乘(N!)中的末尾有多少个0? 例如: N = 5,N! = 120.末尾有1个0. N = 10,N! = 3628800.末尾有2个0。分析:看到这个问题,有人可能第一反应是先求出N!,然后再根据求出的结果,最后得出N!的末尾有多少个0。但是转念一想,会不会溢出。其实,从”哪些数相乘可以得到10”这个角度,问题就变得比较的简单了。 首先考虑,如果N的阶乘为K和10的

2017-07-23 14:28:34 8480

原创 实现一棵二叉树的层序遍历

BinaryTree.h#pragma once#include <iostream>#include<deque>using namespace std;struct BinaryTreeNode{ int _value; BinaryTreeNode* _pLeft; BinaryTreeNode* _pRight;};PrintBinaryTree.cpp#i

2017-07-22 23:26:03 210

原创 栈的压入、弹出序列(是否合法)

元素出栈、入栈顺序的合法性。如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1),则合法。入栈的序列(1,2,3,4,5),出栈序列为(4,5,2,3,1),则不合法。 bool IsPopOrder(const int* pPush, const int* pPop, int nLength) //三个参数:压入序列,弹出序列,序列长度{ bool bProssible

2017-07-20 15:43:57 330

原创 查找一个字符串中第一个只出现两次的字符。比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)

char FirstTwiceChar(char* string){ if (string == NULL) return '\0'; const int tableSize = 256; //char类型的长度为8位,一共就256种可能 unsigned int hashTable[tableSize]; for (unsigned int i =

2017-07-20 00:05:43 255

转载 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)

#include <stack>#include <assert.h>template <typename T> class StackWithMin{public: StackWithMin(void) {} virtual ~StackWithMin(void) {} T& top(void); const T& top(void) const; voi

2017-07-19 16:46:02 762

原创 替换字符串中的空格为$$$。要求时间复杂度为O(N)

#include <iostream>using namespace std;void ReplaceBlank(char string[], int length) //length 为string数组的总容量{ if (string == NULL || length <= 0) return ; int originalLength = 0; //字符串

2017-07-19 16:02:21 393

原创 队列实现栈,栈实现队列

使用两个栈实现一个队列#include <iostream>#include <queue>#include <stack>using namespace std;template<typename T>class Queue{public: Queue(void){}; ~Queue(void){}; void appendTail(const T& node);

2017-07-19 12:57:43 233

转载 C++模板(template)

1.模板的概念。我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。//函数1.int max(int x,int y);{return(x>y)?x:y ;}//函数2.float max( float x,

2017-07-19 12:54:28 230

原创 复杂链表的复制

解题思路:过程分为三步: 首先,遍历链表,复制当前结点currentNode对应的结点cloneCurNode,并将cloneCurNode放置在currentNode的后面,这样就形成一条包含原始链以及复制链的长链。然后,还需将原始链中指针的方向赋予复制链最后,将长链拆分,就得到原始链和复制链了。 /*struct RandomListNode { int label; s

2017-07-18 17:16:02 150

原创 判断两个链表是否相交(考虑带环与不带环)

1.不考虑带环的情况,若相交,求交点解法一:如果两个链表都无环,则可以把第二个链表接在第一个链表后面,如果得到的链表有环,则说明这两个链表相交。这里如果有环,则第二个链表的表头一定在环上,只需要从第二个链表开始遍历,看是否会回到起点即可判断。假设两个链表长度分别为m和n,则时间复杂度为O(m+n) 解法二:若两个链表都无环且交于一点,那么最后一个节点一定是共有的。可以先遍历第一个链表,记录最后一个

2017-07-17 00:50:13 435

翻译 1.设计一个类不能被继承 2.设计一个类只能在堆上创建对象。 3.设计一个类只能在栈上创建对象

1.设计一个类不能被继承常规解法:将构造函数设为私有函数 在C++中,子类的构造函数会自动调用父类的构造函数,子类的析构函数也会调用父类的析构函数。要想一个类不能被继承,只要把它的构造函数和析构函数都设置为私有函数。那么当一个类试图从那里继承时,势必会因为调用构造函数和析构函数而导致编译错误。 可是这个类型的构造函数和析构函数都是私有函数,我们怎样才能得到该类型的实例呢?我们可以通过定义共有的静

2017-07-15 18:29:59 297

原创 shell脚本截取字符串

Linux 的字符串截取很有用。有八种方法。 假设有变量 var=http://www.123.com/456.htm.1、# 号截取,删除左边字符,保留右边字符。 代码如下:echo ${var#*//}其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符 即删除 http:// 结果是 :www.123.com/456.htm2、## 号截取

2017-07-15 18:16:59 176

原创 crond和crontab

一 crond服务crond位于/etc/rc.d/init.d/crond 或 /etc/init.d 或 /etc/rc.d /rc5.d/S90crond,最总引用/var/lock/subsys/crond。crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进

2017-07-14 16:46:38 242

原创 Shell脚本下的彩色进度条

shell中printf的彩色方案颜色是通过添加专用序列来选择的 – 夹在 “\e[“和 “m”之间的数字。如果指定一个以上的数字,则用分号将它们分开。 echo -e “\e[31;42m”使用”\e[0m”序列将颜色重新设置为正常值 颜色分类 \e[30m – \e[37m 设置前景色(字体颜色) echo -e “\e[30m” 灰色 echo -e “\e[31m” 红色

2017-07-06 17:59:44 252

原创 Linux下select函数编写服务器

select函数 1、select的作用 系统提供select函数来实现多路复用输入/输出模型。select系统调用是用来让我们的程序监视多个文件句柄的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有一个或多个发生了状态改变。关于文件句柄,其实就是一个整数,我们最熟悉的句柄是0、1、2三个,0是标准输入,1是标准输出,2是标准错误输出。0、1、2是整数表示的,对应的FILE *

2017-07-06 16:54:33 477

翻译 linux下的eval指令

eval command-line 其中command-line是在终端上键入的一条普通命令行。然而当在它前面放上eval时,其结果是shell在执行命令行之前扫描它两次。如: pipe=”|” eval ls $pipe wc -l shell第1次扫描命令行时,它替换出pipe的值|,接着eval使它再次扫描命令行,这时shell把|作为管道符号了。 如果变量中包含任何需要shell直

2017-06-23 19:46:23 463

原创 linux shell脚本中的``和$()的区别

linux shell脚本中的“和$()的区别,先让我们看一个实例我编写了一个test.sh的脚本文件 注意:shell脚本中用#注释#! /bin/bashecho `echo \$HOSTNAME` #反引号echo $(echo \$HOSTNAME) #$()使用sh -x test.sh来分析bash如何来解释这个脚本,返回的信息如下: 通过上图我们可以得出两个结论: 1

2017-06-23 18:40:24 2681

转载 Linux下struct timeval结构体

转载自:http://blog.chinaunix.net/uid-20548989-id-2533161.htmlstruct timeval  {  __time_t tv_sec;        /* Seconds. */  __suseconds_t tv_usec;  /* Microseconds. */  };  其中,tv_sec为Ep

2017-06-12 11:08:05 900

翻译 使用线程池编写程序

服务器:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <pthread.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include "mypthreadpool.h" int

2017-06-04 17:18:43 210

原创 Linux网络编程 基于TCP的多进程

客户端代码:#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> static

2017-06-04 17:00:16 273

合并有序单链表

合并有序单链表

2017-07-13

Java简单白板程序

利用UDP协议实现一个简单的白板程序,要求如下:用户在客户端界面上单击鼠标左键后程序在鼠标单击位置画20*20的圆形,单击右键后程序在鼠标单击位置画20*20的圆。服务器界面上将同时显示与客户端一致的画面

2017-07-10

空空如也

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

TA关注的人

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