自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux下使用appimage打包程序

一、打包工具首先需要下载打包的工具,打包工具是以下两种:1.linuxdeployqt下载地址:https://github.com/probonopd/linuxdeployqt/releasesa.下载下图所标记的工具:b.配置linuxdeployqt,命令行输入以下指令:sudo mv linuxdeployqt-continuous-x86_64.AppIm...

2019-03-30 14:07:58 10643 10

原创 发布QT程序安装包

一、Windows下发布安装包1、准备QT下载安装:http://download.qt.io/archive/qt/qt-installer-framework 下载安装:http://download.qt.io/official_releases/qt-installer-framework/ Windows系统下载:QtInstal...

2019-01-30 16:21:51 710 1

原创 动态规划

动态规划采用动态规划求解的问题需要具有两个特性:最优子结构(Optimal Substructure):问题的一个最优解中所包含的子问题的解也是最优的。重叠子问题(Overlapping Subproblems):用递归算法对问题进行求解时,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次综上所述,动态规划的关键是 —— 记忆,空间换时间,不重复求

2017-09-10 13:21:11 507

原创 Linux之select函数

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

2017-09-04 13:45:51 898 1

转载 TCP和UDP的区别

TCP协议与UDP协议的区别    首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信!TCP/IP协议是一个协议簇。里面包括很多协议的。UDP只是其中的一个。之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了。TCP/IP协议集包括应用层,

2017-09-04 13:13:20 392

转载 高并发解决方案—提升高并发量服务器性能

一个小型的网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单。随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用的技术更是涉及面非常广,从硬件到软件、编程语言、数据库、WebServer、防火墙等各个领域都有了很高的要求,已经不是原来简单的ht

2017-09-02 11:08:57 752

原创 进程概论

进程数据块(task_struct)task_struct是Linux内核的⼀种数据结构,它会被装载到RAM(随机存储器)里并且包含着进程的信息。每个进程都把它的信息放在 task_struct 这个数据结构里task_struct包含了这些内容:标示符 : 描述本进程的唯⼀标示符,用来区别其他进程。状态 :任务状态,退出代码,退出信号等。优先级 :相对于其他进程的优先级...

2017-08-30 20:46:08 283

转载 fork一个子进程会拷贝父进程的什么

#include<stdio.h> #include<string.h> #include<stdlib.h> #include<unistd.h> void main() { char str[6]="hello"; pid_t pid=fork(); if(pid=...

2017-08-30 15:47:15 2097 1

转载 getline()详解

学习C++的同学可能都会遇到一个getline()函数,譬如在C++premer中,标准string类型第二小节就是“用getline读取整行文本”。书上给的程序如下:int main(){    string line:    while(getline(cin,line))    cout    return 0;}

2017-08-29 16:57:32 281

原创 Linux系统编程--终端和守护进程

内核中处理终端设备的模块1、硬件驱动程序:负责读写实际的硬件设备,比如从键盘读入字符和把字符输出到显示器。2、线路规程:就像一个过滤器,对于某些特殊字符并不是让它直接通过,而是做特殊处理。终端设备输入输出队列缓冲区以输入队列为例:从键盘输入的字符经过线路规程过滤后进入输入队列,用户程序以先进先出的顺序从队列中读取字符,一般情况下,当输入队列满的时候再输入字符会丢失,同时系统会响

2017-08-24 17:02:00 414

原创 select poll epoll总结

I/O请求分两步1、先将数据从存储介质(磁盘、网络等)拷贝到内核缓冲区,此时数据已准备好,可以被用户应用程序读取。2、由用户应用程序拷贝内核缓冲区的数据到用户缓冲区。duo和dup2函数dup和dup2的作用都是用复制一个文件描述符。它们经常用来重定向进程的stdin,stdout和stderr。两个函数的原型:#include   int dup( int oldfd

2017-08-22 22:50:56 389 2

原创 哈希表

哈希表/散列表哈希表是根据关键码值直接进行访问的数据结构。通过关键码值映射到表中一个位置来访问记录,加快查找的速度,这个映射函数叫做哈希函数(散列函数),存放记录的叫做哈希表(散列表)。构造哈希函数的几种方法1、直接定址法2、 除留取余法3、平方取中法4、折叠法哈希冲突/哈希碰撞产生:不同的key值经过哈希函数处理以后,可能产生相同值的哈希地址,这就是哈希冲突,任何

2017-08-21 16:35:36 691

原创 多线程编程

线程概念:每个正在系统上运行的程序都是一个进程。每个进程包含一个到多个线程。进程也可能是整个程序或部分程序的动态执行,线程是一组指令的集合或者是程序的特殊段,它可以在程序里单独执行。线程也可以理解为代码运行的上下文。线程是程序一个单一的顺序控制流程,在单个进程中同时运行多个线程完成不同的工作,称为多线程。进程和线程的区别:                         1、子进程

2017-08-19 11:17:39 245

原创 Linux进程间通信

进程间通信的目的1、数据传输:一个进程需要将它的数据发送给另一个进程。2、资源共享:多个进程之间共享同样的资源。3、通知事件:一个进程需要向另一个或一组进程发送信息,通知它们发生了某种事情。4、进程控制:有些进程希望完全控制另一个进程。此时控制进程能够拦截另一个进程的所有操作,并能够及时知道它的状态改变。管道管道是单向的、先进先出的、无结构的、固定大小的字节流。创建

2017-08-17 18:19:33 272

原创 linux虚拟地址空间

虚拟地址通过页表(Page Table)映射到物理内存,页表由操作系统维护并被处理器引用。内核空间在页表中拥有较高特权级,因此用户态程序试图访问这些页时会导致一个页错误(page fault)。在Linux中,内核空间是持续存在的,并且在所有进程中都映射到同样的物理内存。内核代码和数据总是可寻址,随时准备处理中断和系统调用。与此相反,用户模式地址空间的映射随进程切换的发生而不断变化。 Linu

2017-08-15 16:03:01 549

原创 STL容器

序列式容器vector#include#includeusing namespace std;//vector可以使用下标访问和迭代器访问void the_vector(){ vector the_vector;//创建vector对象 vector::iterator the_iterator;//定义一个迭代器,该迭代器和普通指针作用一样 for (int idx =

2017-08-14 10:24:50 269

原创 字符串操作函数

字符串操作函数的使用和模拟实现#include#include#includeusing namespace std;//strcpy功能:把src所指由NULL结束的字符串复制到dest所指的数组中。'\0'也复制过去。char *my_strcpy(char *dest, const char *src)//模拟实现strcpy{ char *tmp = dest; as

2017-08-12 00:56:53 250

原创 位图

位图法位图法就是bitmap的缩写。所谓bitmap,就是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。自己实现在位图中,每个元素为“0”或“1”,表示其对应的元素不存在或者存在。举例:比如数字32:字节位置:32>>5 = 1;位位置:32%32 = 0;那么32放在_table下标为1的字节处,该字节的第一个

2017-08-10 22:52:27 215

原创 删除小写字母字符串中重复字符。

删除小写字母字符串中重复字符。比如,输入:bbcacdww;输出:bacdw。void DeleteString(char* pstr){ if (pstr == NULL) return; //创建哈希表并初始化 char *pHash = pstr; const int tablesize = 256; int hashtable[tablesize]; for (int

2017-08-10 20:31:12 317

原创 翻转单词序列 vs 左旋转字符串

翻转字符串翻转单词序列 vs 左旋转字符串都会用到翻转字符串函数。void my_reverse(char* begin,char* end){ if (begin == NULL || end == NULL) return; while (begin < end) { char temp = *begin; *begin = *end; *end = tem

2017-08-10 10:38:34 289

转载 Linux必学的60个命令

linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不开使用系统提供的命令。要想真正理解Linux系统,就必须从Linux命令学起,通过基础的命令学习可以进一步理解Linux系统。不同Linux发行版的命令数量不一样,但Linux发行版本最少的命令也有200多个。这里笔者把比较重要和使用频率最多的命

2017-08-09 17:27:29 2089

原创 快速排序

思路给定一个待排序的序列,然后根据枢轴把该序列分为两个可能为空的子序列,该枢轴左边的元素都小于等于枢轴的元素,该枢轴右边的元素都大于等于该枢轴的元素。递归实现//快速排序int partion(int *array, int left, int right){ int begin = left;//标记第一个节点 int end = right;//标记最后一个节点

2017-08-07 22:42:16 200

原创 数据结构之堆和堆排序

堆的概念如果有一个数的集合,把它的所有元素按完全二叉树额顺序存储方式存储在一个一维数组中,称为堆。最小堆:任一结点的的值均小于它的左右孩子的值,位于堆顶结点的值最小。最大堆:任一结点的的值均大于它的左右孩子的值,位于堆顶结点的值最大。观察图中大堆和小堆。小堆:从根节点到任何一个叶子结点都是递减的。大堆:从根节点到任何一个叶子结点都是递增的。创建堆一般都用数组来表

2017-08-07 19:13:10 281

原创 c语言实现继承和多态

继承概念:继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现由简单到复杂的认知过程。多态        多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP)的一个重要特征。C++中的多态性具体体现在运行和编译两个方面。运行时多态是动态多态,其

2017-08-04 19:18:22 685

原创 插入排序

直接插入排序基本思想当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与array[i-1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移。如图:元素集合越接近有序,直接插入排序算法的时间效率越高,其时间效率在O(n)与O

2017-08-02 14:17:00 228

原创 希尔排序和shell之希尔排序

希尔排序希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。基本思想先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况

2017-08-02 13:52:33 321

原创 创建搜索二叉树

二叉搜索树:对于树中的每个节点,它的左子树中所有节点的值都小于父结点,右子树所有值都大于父结点。创建实现:#include#include#includeusing namespace std;struct BinaryNode{ BinaryNode* _left; BinaryNode* _right; BinaryNode* _parent; int _value

2017-07-31 11:38:04 377

原创 搜索二叉树和双向链表

递归实现1、解题思路:1.将左子树构造成双链表,并返回链表头节点。2.定位至左子树双链表最后一个节点。3.如果左子树链表不为空的话,将当前root追加到左子树链表。4.将右子树构造成双链表,并返回链表头节点。5.如果右子树链表不为空的话,将该链表追加到root节点之后。6.根据左子树链表是否为空确定返回的节点。2、实现代码void ConvertNode(B

2017-07-31 11:31:18 222

原创 前序遍历和中序遍历重建二叉树

原理在二叉树中,前序遍历的第一个结点是根节点,但在中序遍历序列中,根结点在序列中间,跟结点的左边是左子树,根结点的右边是右子树。因此,保存前序遍历的序列中的第一个结点为新建二叉树的根结点,遍历中序遍历序列,寻找该根结点。就可以重建二叉树了!实现代码//由前序遍历和中序遍历重建二叉树(前序序列:1 2 3 4 5 6 - 中序序列:3 2 4 1 6 5)BinaryNode* Con

2017-07-30 21:18:49 232

原创 String类与深浅拷贝

浅拷贝1、概念:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅拷贝仅仅复制所考虑的对象,而不是复制它所引用的对象。2、举例class String{public: String(char* pStr = "")//构造函数浅拷贝 { if (NULL == pStr) { _pStr = new ch

2017-07-30 14:24:56 228

原创 判断二叉树是否为完全二叉树

原理从二叉树的根层序遍历直到遍历到第一个NULL,然后继续遍历,如果还有结点则该树不是完全二叉树。实现代码1、第一种bool _IsEntireTree(BinaryTreeNode* pRoot) { if (pRoot == NULL) return true; queue* > q; q.push(pRoot); //遍历链表直到NULL结点,该循环退

2017-07-29 17:09:22 411

原创 求二叉树中两个节点的最近公共祖先结点

二叉树是搜索二叉树1、原理:二叉搜索树是排序过的 ,位于左子树的结点都比父结点小,位于右子树的结点都比父结点大,我们只需从根节点开始和两个输入的结点进行比较,如果当前节点的值比两个结点的值都大,那么最低的公共祖先结点一定在该结点的左子树中,下一步开遍历当前结点的左子树。如果当前节点的值比两个结点的值都小,那么最低的公共祖先结点一定在该结点的右子树中,下一步开遍历当前结点的右子树。这样从上到下找

2017-07-29 16:26:51 3201 2

原创 链表翻转

1、给出一个链表和一个数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。2、实现代码#include#includeusing namespace std;typedef struct ListNode{ int _value; stru

2017-07-23 23:37:50 223

原创 判断带环链表相交的点

1、判断两个链表是否相交,若相交,求交点。(假设链表可能带环)。#include#includeusing namespace std;typedef struct ListNode{ int _value; struct ListNode *Next;//指向下一个节点 struct ListNode* _random;//指向任意节点或者空节点 ListNode(int va

2017-07-23 20:18:12 485

原创 TCP/IP模型层次结构

一、计算机网络体系结构(1)OSI的七层协议:从上到下:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。(2)TCP/IP四层协议:从上到下:应用层,传输层、网络层、数据链路层、网络接口层。(3)五层协议:从上到下:应用层、传输层、网络层、数据链路层、物理层。二、五层协议1、物理层(1)物理层设备:中继器、集线器。2、数据链路层1、三个基本问

2017-07-23 19:05:13 13187

原创 数据结构之小算法

1、给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3 628 800,N!的末尾有两个0。int ZeroNumber(int num){ int ret = 0; while (num) { ret += num / 5; num /= 5; } return ret;}int main(){ int N = 0; cin >> N;

2017-07-22 22:14:33 296

原创 查找一个字符串中第一个只出现两次的字符

1、实现原理     哈希表是一种比较复杂的数据结构。由于比较复杂,STL中没有实现哈希表,因此需要我们自己实现一个。但由于本题的特殊性,我们只需要一个非常简单的哈希表就能满足要求。由于字符(char)是一个长度为8的数据类型,因此总共有可能256 种可能。于是我们创建一个长度为256的数组,每个字母根据其ASCII码值作为数组的下标对应数组的对应项,而数组中存储的是每个字符对应的次数。这

2017-07-20 00:28:36 921

原创 实现一个能找到栈的最小元素的min函数

1、实现原理定义两个栈,一个是数据栈,一个是辅助栈。举例说明:首先往空的数据栈中压入3,显然现在3是最小值,把这个值也压入辅助栈,接下来往数据栈中压入4,由于之前的3还是最小值,则4同样压入压入辅助栈(为了和数据栈元素个数相同),接着往数据栈中压入2,2小于之前的最小值3,则2也压入辅助栈,则辅助栈的栈顶就是最小值。数据栈和辅助栈都弹出栈顶元素,此时位于辅助栈的栈顶元素依然是最小值。2、实

2017-07-19 23:03:10 273

原创 两个队列实现一个栈

1、实行原理       设有两个队列A和B,栈的push操作,直接push到A的队尾就行了。栈的pop操作时,将A中的队列依次取出放到B中,取到最后一个时,最后一个不要放到B中,直接删掉,再将B中的值依次放回A中。栈的top操作时,将A中的队列依次取出放到B中,取到最后一个时,将最后一个值记录下来,再将最后一个值放到B中,再将B中的值依次放回到A中。2、实现代码#includ

2017-07-19 13:13:53 198

原创 约瑟夫环

1、约瑟夫环问题       约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。2、原理约瑟夫环运作如下:1、一群人围在一起坐成环状(如:N)2、从某个编号开始报数(如:K)

2017-07-17 23:36:27 222

空空如也

空空如也

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

TA关注的人

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