
c++
文章平均质量分 64
世纪殇
一个不断保持前进的程序员,目前潜心在数据分析和中等网站架构设计中
展开
-
获得一个2n数组中的N个元素,使得该N个元素与剩余元素和最小
void MaoPao(int * a,int low,int high,bool BMax){ if(NULL==a) { return ; } if(low<high) { if(BMax) { //开始存放最大值 for(int i=high;i>low;i--) { if(a[i]>a[i-1]) { int tmp=a原创 2015-07-24 19:12:36 · 1109 阅读 · 0 评论 -
数组矩阵的顺时针输出
其实这个题目,我要讲的并不是这个题目的编码过程,而是对于这个问题解决过程:我们不能遇到这个问题之后立即编码是错误的,然而立即拿出笔在纸上写写画画时,也是需要进行技巧的,针对这个问题,我们首先看看顺时针时,走一圈作为一个循环,然而该循环的起点是很有意思的,这个点的所在的点行坐标和列坐标是相同的也即是双层循环的,一层内部循环是要进行四个方向的的遍历。从左到右 从上到下原创 2015-07-19 21:20:49 · 2350 阅读 · 0 评论 -
linux C进程信息查询
#include#include#include#include#include#include#include#include#include#includeint errno;extern char **environ;void getNameById(pid_t pid);int main(){ printf("开始创建临时文件\n"); //execl("/原创 2015-07-17 17:53:17 · 1211 阅读 · 0 评论 -
掷骰子,求得每个数的概率
题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。 先分析思路,再看实现。 首先解决前提性的问题:一个骰子的点数只可能是[1,6],所以S的值的取值范围是[n,6n],这里当然只考虑整数。 思路一:统计各个S值出现的次数,然后 各个S值出现的概率 = 各个S值出现的次数 / n个骰子所有点数的排列数转载 2015-07-29 21:20:23 · 6436 阅读 · 0 评论 -
获得二叉树中两个节点的所有公共祖先
核心算法:首先使用递归方式获得最低公共祖先,然后使用队列特性,先进后出的特性使用广度搜索优先算法,按照广度进行填充在队列中,然后获得最低公共祖先元素的深度,然后我们需要遍历该队列中的所有元素,只要大于等于目标元素的深度,就可以将该元素在队列中去除,剩下的就是所有公共祖先的所有祖先了struct Node{ int val; Node* left; Node* right; Node(原创 2015-07-16 21:33:25 · 1318 阅读 · 0 评论 -
fork进程创建
fork创建子进程,fork函数返回两个值,当为0时,则认为是子进程代码块执行区域,而不为0则是父进程代码块执行区域。我们需要知道的是,fork子进程可以与父进程共享部分进程上下文,而与此不同的是execl函数,一旦开始执行到execl函数时,启动被调用的函数,后面的代码则不再执行,而是直接执行调用的程序,上下文也被替换。#include#include#include#includ原创 2015-07-14 20:51:55 · 588 阅读 · 0 评论 -
找到一个乱序数组排序后某一特定数值首次和末次出现的位置
不多说,上代码,我的思路是利用快速排序,进行数组排序,而后利用二分查找方法,进行快速定位int intArray[]={12,451,0,5,45,15,78,23,54,76,451};void QuickSort(int* a,int low,int high){ if(NULL==a) { return; } if(low>=high) { return ; }原创 2015-07-15 10:54:35 · 1082 阅读 · 0 评论 -
关于树的某些操作
1、找到链表中的倒数第k个元素:源代码如下:struct binNode{ binNode* next; int val; binNode():next(NULL),val(0){};};binNode* createBinNode(){ int a=0; binNode *head=NULL,*cur=NULL; bool mark=false; while(cin>>a原创 2015-07-15 09:51:52 · 568 阅读 · 0 评论 -
奶牛问题
在农场中,奶牛家族是一个非常庞大的家族,对于家族中的母牛,从它出生那年算起,第三年便能成熟,成熟的母牛每年可以生出一只小母牛。即母牛从出生开始的第三年便 能做妈妈。最开始农场只有一只母牛,它从第二年开始生小母牛。请设计一个高效 算法,返回第n年的母牛总数,已知n的范围为int范围内的正整数。int getNum(int n){ hash_map newCows; pair原创 2015-07-25 17:44:55 · 1355 阅读 · 0 评论 -
零钱兑换问题
现在有零钱 1、3、5、10,各无数张,现在需要进行将所有的钱去换250元,请问一共有多少方案int a[]={1,3,5,10};int tmp[4]={0};int count=0;const int money=250;void getCount(int sum,int index){ if(sum>money) { return;原创 2015-07-25 18:10:31 · 1008 阅读 · 0 评论 -
C1020: 意外的 #endif
对于“ fatal error C1020: 意外的 #endif ”错误,原因大致如下: 如果使用了预编译头,VC会在所有CPP文件里寻找 #include "stdafx.h " 在找到这行代码之前,VC会忽略所有代码。也就是说,下例中,VC 找到第二行 #include "stdafx.h" 之前,会将第一行#ifndef _EiC 忽略掉,因此出现“意外的 #end转载 2015-06-18 11:07:58 · 5894 阅读 · 0 评论 -
二叉树的遍历
所谓二叉树的遍历无非是三种,先序遍历,中序遍历,后序遍历,而此间的先中后指明的都是根的所在,其他都是先左子树,而后右子树也即先序遍历:根 左子树 右子树中序遍历:左子树 根 右子树后序遍历:左子树 右子树 根#includeusing namespace std;struct node{ node(){ value = -1; left = NULL;原创 2015-06-17 20:59:18 · 448 阅读 · 0 评论 -
根据已知入栈顺序判断一个数组是否是出栈顺序
题目含义已经很明确了,现在开始使用一个样例输入和输出int a[]={1,2,3,4,5};//原始的入栈顺序int b[]={4,5,3,1,2};//出栈顺序int b1[]={4,5,3,2,1};//出栈顺序我的策略是依次遍历给定的出栈顺序数组,从第一个开始,以b为例,1、第一个元素是4,则在a中确定4所在的位置,将4之前的所有元素入栈记为sck,并记录该位置nCoun原创 2015-07-20 08:37:46 · 2116 阅读 · 0 评论 -
最长公共子序列
class LCS {public: int findLCS(string A, int m, string B, int n) { int mn[50][50]={0}; //初始化 for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) { mn[i][j]=0; if(A.at(i-1)==B.at(j-1)原创 2015-08-13 17:05:24 · 477 阅读 · 0 评论 -
遍历整个二叉树的所有路径
如果将所有的二叉树的路径中的节点值的和的最大值vector g_vec;int g_max=0;int maxPathSum(TreeNode *root){ if(root!=NULL) { g_vec.push_back(root); if(root->left==NULL&&root->right==NULL) { int max=0; vector:原创 2015-07-31 19:08:44 · 3312 阅读 · 0 评论 -
给定入栈顺序,求解出栈顺序
#include #include using namespace std;void finn(const int n,int cur,vector&stac,vector&outL,int&count){ if((int)outL.size ()==n)//终点 { //如果需要对应的出栈顺序那么outL中即为所求 count++;转载 2015-08-05 10:45:02 · 1605 阅读 · 0 评论 -
逆序的BSF输出
查看逆序的BSF输出如图所示:这里,我们首先创建一颗二叉树,并使用先序遍历,依次计算其中每个节点的深度,其次利用BSF算法,利用deque获得序列,但同时使用vector只进行push_back无pop_front这样,vector中就是根据BSF优先算法获得的序列,但还是没有逆序,就利用深度的不同获得,依次递减,进行输出:#include "stdafx.h"#includ原创 2015-08-04 19:27:12 · 581 阅读 · 0 评论 -
由无序数组中找到第K 大的元素
当然如果我们想要实现这个问题会有很多思路,可以将原来的数组进行排序即可,直接随机访问到第K个元素即可。我们专门写一篇博客当然不是想利用这种思路的,可以试试改进的快速排序啊,对不,我个人觉得是利用了两种思路一个是快速排序一个是二分查找,在进行快速排序的时候,在指定范围内找到该值的下标,如果该下标与K值相比比较大,则结束end=index-1,相反的话 start=index+1即可当然因为原创 2015-07-23 15:43:35 · 4814 阅读 · 1 评论 -
二叉树中所有路径的和为一特定值
这里与之前不同的是,我们选择的路径的规定是起点可以是任何节点,同样终点也可以是任何节点#include#includeusing namespace std;struct Node{ int val; Node* left; Node* right; Node(int x=0):val(x),left(NULL),right(NULL){ }};void findpath(原创 2015-08-04 14:46:25 · 565 阅读 · 0 评论 -
判断一个数列是否是二叉树后序遍历的结果
例如数组 a[]={5,7,6,9,11,10,8}判断是否是二查搜索树后序遍历,则只需要将该序列还原为搜索二叉树,即可,但是二叉树的还原过程1.确定根节点所在,当然因为是后续所以根节点在数组的末尾元素2.确定两棵子树的范围以及依次插入的方向在此题中8 为根节点所在 6 和10 是距离根节点最近的元素,也即插入方向是从6 和10 开始顺次向前,6到5的位置截止,10到9的位置截止原创 2015-07-22 10:08:35 · 1875 阅读 · 0 评论 -
linux下线程同步
这里我做的测试使用的模型是生产者消费者模型,分成两种情况其一只有一个缓冲区,我们使用信号量即可,分成两个,empty 和full。当缓冲区有空时,则生产者生产,当缓冲区full时。消费者消费#include#include#include#include#include//生产者消费者模式,只有一个缓冲区,一个消费者一个生产者//使用信号量进行线程同步void* consu原创 2015-07-22 16:36:41 · 462 阅读 · 0 评论 -
linux下线程的创建和管理
#include#include#include#includechar msg[]="Hello";void* thread_function(void*);int main(){ int res=-1; pthread_t th={0}; printf("the mem is %s\n",msg); res=pthread_c原创 2015-07-22 15:20:12 · 546 阅读 · 0 评论 -
子树的包含问题
判断一棵树是否是另一棵树的子树,操作方法主要分成两部分,第一部分是确定子树的根节点在待检测树中的位置,检测方法很是简单,使用先序遍历整棵树,如果遍历中节点的值等于子树的根节点的值即可第二部分,是在第一部分的基础上,已经有了两个根节点,所以我们可以使用递归的方法,进行判断,直到带判断的两个节点中有一个是NULL即可struct BinTree{ int val; BinTree*原创 2015-07-22 09:19:04 · 726 阅读 · 0 评论 -
关于atoi的函数实现
int atoi(char* mm){ if(NULL==mm) { return 0; } bool positive=true; if(mm[0]=='-') { positive=false; mm++; } if(mm[0]=='+') { mm++; } int sum=0; long long lsum=0; for(char* index=原创 2015-08-02 18:06:46 · 570 阅读 · 0 评论 -
获得一个数组的全排列
例如 char a[]="abcd"求这个数组的全排列,将复杂问题或者不能直接解决的问题转变为多个简单问题的方法就是,让所有的元素一次成为第一个元素,void Traversal(char* const a,char* const pBegin){ if(NULL==a) return; if('\0'==*pBegin) { cout<<a<<endl; } else原创 2015-07-21 21:15:27 · 2156 阅读 · 0 评论 -
关于递归的各种操作
现在说说,现在说说struct Node{ Node* left; Node* right; int val; Node(int a):val(a){ left=NULL; right=NULL; }};//获得整棵树的深度int GetDepth(Node* root){ if(NULL==root) { return 0; } int lDepth=G原创 2015-08-01 19:53:46 · 645 阅读 · 0 评论 -
win32 dll导出类的使用
因为普通的dll只能导出函数,所以我们需要进行转换,也即在导出的函数中进行类对象的新建过程,返回类对象的指针,同时在客户端重新声明该类,然后进行通过返回的指针进行调用,但是有一点需要我们注意的是,在进行类成员函数调用的时候,会出现不能解析的错误,因为如果普通类的成员函数在连接过程中就需要获得类成员函数的地址,而显然在这种情况下是不行的我们需要在程序运行过程中获得函数地址,现在知道了吧??对,虚函数原创 2015-06-17 10:59:04 · 1401 阅读 · 0 评论 -
C++中的try catch语句
之前一直在使用C#,其中所有的可能会出现的异常操作,都有Exception来进行,本人也从未进行过深究,但是在C++中就没有这么简洁的使用方式了,只好去尝试使用最原始的解决方案,现整理代码,如下///////////////////////////////////////////////////////////////////////////////////////////////////////原创 2015-03-04 21:03:40 · 2685 阅读 · 0 评论 -
struct 和typedef struct的区别
一直以来都不怎么会使用struct,也不清楚原创 2014-10-10 11:23:50 · 594 阅读 · 0 评论 -
linux c++之互斥变量和条件变量
/* * main.cpp * * Created on: Jul 3, 2014 * Author: john */#include#include#includeusing namespace std;//声明互斥锁和条件变量pthread_mutex_t mutex;pthread_cond_t cond;void* thread1(void* arg原创 2014-07-04 21:03:07 · 1468 阅读 · 0 评论 -
linux C++ GTK编程实现
总是觉得自己学的太少,害怕原创 2014-07-25 16:36:26 · 2890 阅读 · 0 评论 -
ubuntu eclipse 下驚醒GTK的配置(全)
偶然的想法想玩玩GTK,因为Qt就是对gtk的C++封装,想着gtk应该比qt更高的执行效率吧,下面分享下自己搭建的过程。 1、我的ubuntu虚拟机是安装了eclipse+cdt的,如果是安装了eclipse没有安装CDT,则要安装CDT: .可以在Eclipse update中输入以下地址来安装:http://download.eclipse.org/tools/cdt/原创 2014-07-23 20:06:15 · 1819 阅读 · 0 评论 -
ubuntu 安装JDK和eclipse
环境:Ubuntu 10.04步骤:1、下载安装jdk$sudo apt-get install openjdk-6-jdk2、查看当前系统中的JVM$sudo update-alternatives --display java3、安装JVM路径$sudo update-alternative s --install /usr/bin/java java /usr转载 2014-07-22 11:30:32 · 670 阅读 · 0 评论 -
linux C文件属性的读取
#include#include#include#include#includeusing namespace std;int main(){ int fileDes=open("rx.txt",O_CREAT|O_RDWR,0666); if(fileDes==-1) { cout<<"open file error :"<<errno<<endl原创 2014-06-12 21:45:51 · 1159 阅读 · 0 评论 -
linux C++ 读写文件
从现在开始,进行linux的学习了,开始呢,总原创 2014-06-10 15:16:12 · 6494 阅读 · 0 评论 -
linux C++静态库 动态库的生成于调用
我使用的是ubuntu 12.04 编程环境是eclipse原创 2014-07-21 08:42:26 · 1530 阅读 · 1 评论 -
linux c++进程通信之消息队列
消息队列是一个存放在内核中的消息列原创 2014-07-18 18:36:47 · 2641 阅读 · 0 评论 -
线程的私有数据
/* * main.cpp * * Created on: Jun 27, 2014 * Author: john */#include#include#include#include#includepthread_key_t key;void* thread_1(void* arg) { int tsd=5; printf("thread1原创 2014-06-27 16:24:06 · 671 阅读 · 0 评论 -
linux 创建线程
这篇博文就只说下,在ubuntu下 eclipse C++环境之下怎么使用下原创 2014-06-25 08:34:44 · 683 阅读 · 0 评论 -
linux c++ 管道操作
/* * main.cpp * * Created on: Jul 16, 2014 * Author: john */#include#include#include#include#include//read pipevoid read_from_pipe(int fd){ char message[100]={0}; read(fd,原创 2014-07-16 17:01:49 · 2346 阅读 · 0 评论