自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

行而不辍,未来可期 - King

不要让霓虹灯和人群的喧嚣影响了自己前进的方向~

  • 博客(53)
  • 资源 (7)
  • 收藏
  • 关注

原创 《C专家编程》:函数如何返回一个数组(九)

这节的内容比较少也比较简单,主要是觉得用的很少,所以单独提出来加深印象。主要涉及到函数如何返回一个数组的问题。还有关于内存的分配和扩展基础知识的复习。一、如何使用指针从函数返回一个数组。    前几节,我们分析了怎么样把一个数组当参数传递给指针。本小节换个方向讨论数据的转化:从函数返回一个数组。严格的说,函数无法返回一个数组。但是可以让函数返回一个指向任何数据结构的指针,当然也可以是一

2016-05-31 16:47:57 3317

原创 《C专家编程》:再论指针(八)

千万不要忘了,当你把一个手指指向别人的时候,你手上的另外还有三个手指指向了你自己.... ---多疑间谍的格言 在笔记(7)里面我们也讲解了,多维数组和指针的一些知识和转换。这节内容我们将继续介绍数组与指针有关的知识。一、数组的数组和指针数组 我们知道多维数组虽然看起来其存储结构是一张表,但是其实系统是决不允许程序按这种方式进行存储数据的。其单个元素的存储与引用都是以线性形式排列在内存中。如下图一所示:

2016-05-31 16:32:14 2420

原创 《剑指offer》:[9]字符串中替换空格

其实这个技巧可以使用于很多不同字符串的替换,不仅仅是空格的替换。可以是任意字母的替换。并且是N替换1。     例如:将字符串“This is my life!”中的空格替换为“%20”。     这个主要是因为在网络编程中,如果URL参数中含有特殊的字符,如空格,'#'等,可能导致服务器无法获得正确的参数值。我们需要将这些符号换成服务器识别的字符。转换规则为在‘%’的后面跟上ASCII码

2016-05-30 15:26:19 588

原创 《剑指offer》:[8]二维数组中的查找

解决问题:二维数组中的查找:     二维数组是一个比较常用的数据结构,主要由于其顺序存储,其下标引用的查找和访问的随机性优点尤其突出,使其在O(1)时间内就可以访问我们想要的位置数据。例如我们想要看第10个的数据内容,那么直接取a[9]就可以了,十分方便。但是它也有缺点,那就是插入和删除时效率较低,正因为其连续存储的数据结构,所以在每次插入和删除后都需要移动大量的数据。所以导致其效率比较

2016-05-30 15:20:55 577

原创 《C专家编程》:深度剖析数组与指针(七)

数组与指针的关系颇有点像诗和词的关系:他们都是文学形式之一,有不少共同之处,但在实际的表现手法上又有各自的特色。---Peter Van Der Linden 在笔记(4)中我们讨论了数组和指针并不一致的情况(在一个文件中定义为数组,在另一个文件中声明为指针)。所以在代码中的定义和引用时一定要“配套使用”。不然可能会出现一想不到的问题。这一节,我们将继续讨论可以把指针和数组看作相同的情况,因为数组和指针可以互换的情形要比两者不可互换的情形更为常见。一、声明和使用声明可以进一步分成3中情

2016-05-29 21:23:09 1208

原创 《C专家编程》:C程序运行时的数据结构(六)

编程语言的经典对立之一就是代码和数据的区别。但是有些语言如LISP把两者视为一体。但是C语言却维持着两者的区别。代码和数据的区别也可以认为是编译时和运行时的分界线。编译器的绝大部分工作更翻译代码有关,必要的数据存储管理的绝大部分都在运行时进行。  学习运行时系统,主要有三个理由:(1)有助于优化代码,获得最佳效率;(2)它有助于理解更高级的材料;(3)当陷入麻烦时,它可以使分析问题

2016-05-28 16:59:53 1889

原创 《剑指offer》:[7]两个队列实现栈的C++代码实现

问题:两个队列实现栈。    因为队列的特点是先进先出,而栈式先进后出。所以具体的实现步骤如下:(1)判断是否为NULL;如果queue1和queue2都为NULL,则该栈为NULL;(2)如果queue1不为NULL,而queue2为NULL;则queue1出队,进队到queue2,如果queue1的元素个数只剩一个的时候就出队输出,也就是出栈;反之亦然;(3)若果那个队列不为N

2016-05-26 11:21:02 1512

原创 《剑指offer》:[6]两个栈实现一个队列的C++代码实现

问题:用两个栈实现一个队列,完成在队列尾部插入节点和在队列头部删除结点的功能。由于栈的特点是先进后出,要想实现队列,必须做到先进先出;     首先将数据输入到stack1中,这时候先进后出,再将stack1中的数据移动到stack2中,相当于将输入的数据的顺序颠倒,这样也就实现了队列的特点,先进先出。下面具体说一下队列为NULL,入队和出队的具体实现方法;(1)判断队列是否为NULL

2016-05-26 11:16:57 931

原创 《C专家编程》:对链接和函数库的思考(五)

当我们开始编程时,就惊奇的发现要让程序正确运转比想象的要难。我们不得不使用给调试结束。我还清楚的记得那一刻,从那时开始我就领悟到,从我自己的程序里寻找错误将成为我生活的一个重要部分。----Maurice Wikes发现Bug,1949.  一、编译器       编译器创建一个输出文件,这个文件包含了可重定向的对象。这些对象就是与源程序对应的数据和机器指令。绝大多数的编译器并不是一个单一

2016-05-25 18:00:00 1373

原创 《剑指offer》:[5]查找两个链表的第一个公共结点

解决问题:输入两个链表头结点,找到链表中的第一个公共的结点。       方案一:蛮力法。能解决问题,但是像许多人说的那样,也只能这样了!具体方法是,用list2中的每个元素和list1中的每个元素进行比较,当得到第一个相等的元素的时候就是两个链表的第一个公共结点。假设list1和list2分别长M、N,则时间复杂度飚至O(M*N).       方案二:借助栈的方法。因为找公共结点,那么

2016-05-24 16:52:55 614

原创 《剑指offer》:[4]合并两个单链表

合并两个链表,可以分为有序和无序的链表。        无序链表非常简单,将一个链表接在另一个链表的后面就可以了。        但是如果是有序的两个链表就设计到判断和一些细节,这里主要实现两个递增有序的链表。合并方案一:采用递归方式#include #include #include using namespace std;struct List{ int numbe

2016-05-24 15:29:28 763

原创 《C专家编程》:指针和数组的区别详解(四)

C语言编程新手常听到的说法之一就是“数组和指针是相同的”。不幸的是,这是一种非常危险的说法,并不完全正确。一、什么是声明,什么是定义。 注意下面声明的区别: extern int *x;//声明x是一个int类型的指针; extern int y[]; //第二条语句声明y是个int类型的整形数组,长度尚未确定,其存储在别处定义;

2016-05-24 10:21:15 2873

原创 《剑指offer》:[3]得到链表中倒数第K个结点

由于链表中不能随机得到一个结点的值,也不知道具体的第K个结点在什么位置,不像数组那样随机存取效率高,所以有时候我们需要知道第K个元素的值,这里我们讨论一下如何获得倒数第K个元素的值。        正向第K个元素很简单,用一趟遍历便可以得到。时间复杂度为O(N)。       那么倒数第K个元素,还需要遍历一次,其时间复杂度为:O(N)+O(N)=O(N)。遍历一遍,我们就知道了链表的长度

2016-05-23 17:23:07 760

原创 《剑指offer》:[2]O(1)时间删除链表结点

问题:给定一个单向的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。      因为单链表的最大弊病就是查找是单向的,只能向前不能后退!精神可嘉,但是带来了限制。比如一般我我们考虑删除链表的一个给定结点都是要从头结点遍历找到要删除的结点的前驱结点,然后才能正确的删除给定的结点,其查找的时间复杂度为O(N),能不能不进行查找使删除的效率为O(1)呢?答案是肯定的。下面来看一看!

2016-05-23 16:30:11 610

原创 《剑指offer》:[1]反转一个单链表

“'神马’都是浮云,应聘技术岗位就是要踏实写程序。” ----田超(微软,SDE II) 这已经是第二遍看《剑指offer》这本书了,发现里面讲的还是比较基础,不能说讲的多么多么精湛高深,但是整本书确实有很多值得我们学习的技巧和方法,易错点。作为菜鸟程序猿一族的我深深的明白这些都是必须要读的书籍,因为它是打开程序猿世界的一把钥匙,是万丈高楼的地基,是开战前的厉兵秣马,是我想登

2016-05-23 15:36:51 1163

原创 《C专家编程》:语言类型的声明(三)

C语言在声明各种类型的变量,函数等的时候包含一个十分重要的东西,那就是声明器(declarator)-它是所有声明的核心。简单的说,声明器就是标识符以及与它组合在一起的任何指针、函数括号、数组下表等。有些事合法但是有些是非法的:        例如fool()(),或者foo()[]这都是非法的。        但是const  int* (*p(int **p))(char *str,f

2016-05-22 20:54:36 779

原创 C++的初始化列表(Initilization List)

初始化类的成员有两种方式,一是使用初始化列表,二是在构造函数体内进行赋值操作。第二种我们都比较熟悉了,来看看第一种情况。       一、 为什么使用初始化列表(Initialization list)       使用初始化列表一方面主要是基于性能问题,对于类类型来说,最好使用初始化列表,为什么呢?        因为对于没有默认构造函数的类类型,使用初始化列表可以不必调用默认构造函

2016-05-21 22:28:07 4558 4

原创 函数返回局部变量问题

一般的来说,函数是可以返回局部变量的,但是要注意几种情况。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的来说,函数不能通过返回指

2016-05-21 20:16:02 6272 1

原创 《C专家编程》:最庞大的实体类型-Bug(二)

Bug是迄今为止地球上最庞大的实体类型,有近百万种已知的品种。在这方面,它比其他任何已知的生物种类的总和还要多,而且至少多出四倍。---摘自Snope教授的Encyclopedia of Animmal Life。         分析编程语言缺陷的一种方法就是把所有的缺陷归于三类:        “多做之过”--不该做的做了;        “少做之过”--该做的没有做;

2016-05-21 16:01:59 1155

原创 《重温最美古诗词》

不经意间,我拿起了实验室W君书架上的一本书,书名是《重温最美古诗词》....然后我就喜欢上了...     W君可是我们寝室里的一个才子,四大名著中的《三国演义》,还记得那是一个晴朗的下午,他与我们寝室另一位X君,两把椅子,相隔不到半米,从“天下大势,分久必合,合久必分...”到最后的三分归晋,足足讲了五个点,从未间断。X君平时是个很活泼的人,说话我们都插不上嘴的那种,寝室外号“老司机”,但是

2016-05-21 11:35:39 2752

原创 《Effective C++》:尽量用const和inline取代#define(1)

Shifting from C to C++!!      学习C++也有一段时间了,写此笔记,主要是一是激励监督自己不间断的学习,而是加深知识的理解与记忆!      C++是一个难学易用的语言!      C++的难学,不仅在其广博的语法,以及语法背后的语意,以及语意背后的深层思考,它不仅仅是一门语言,而且是用语言创造智慧的语言。      C++的难学,还在于它提供了四种不同

2016-05-19 11:15:58 845

原创 《C专家编程》:编译器的金科玉律(一)

C诡异离奇,缺陷重重,却获得了巨大的成功。    --Dennis Ritch        好记性不如烂笔头,但是作为一个计算机专业的小菜选手,用笔而不同键盘是不是有点儿对不起互联网了,怎么的也要挤进这个知识互联共享的大家庭里。最近在看基本编程相关的书籍,这本曾经读过的[美]Peter Van Der Linden著 徐波 译的《C专家编程》回头看一看,发现有很多知识点,虽然和其他文章有重复

2016-05-18 21:27:10 1174

转载 卷积神经网路的具体实现

前言  从理解卷积神经到实现它,前后花了一个月时间,现在也还有一些地方没有理解透彻,CNN还是有一定难度的,不是看哪个的博客和一两篇论文就明白了,主要还是靠自己去专研,阅读推荐列表在末尾的参考文献。目前实现的CNN在MINIT数据集上效果还不错,但是还有一些bug,因为最近比较忙,先把之前做的总结一下,以后再继续优化。  卷积神经网络CNN是Deep Learning的一个重要算法

2016-05-16 11:41:20 1035

转载 卷积神经网络的原理公式推导与实现

这个主要是CNN的推导和实现的一些笔记,再看懂这个笔记之前,最好具有CNN的一些基础。这里也先列出一个资料供参考:[1] Deep Learning(深度学习)学习笔记整理系列之(七)[2] LeNet-5, convolutional neural networks[3]卷积神经网络[4] Neural Network for Recognition

2016-05-16 11:30:18 15854

转载 Tcp服务端一直sleep,客户端不断发送数据产生的问题

问题:“一个tcp服务端和一个tcp客户端,客户端和服务端建立连接后,服务端一直sleep,然后客户端一直发送数据会是什么现象”。

2016-05-10 22:19:21 8048 1

原创 若干个(大量)数字中找前K大/小的元素--数值型

方法一:根据快速排序划分的思想 :(1) 递归对所有数据分成[a,b)b(b,d]两个区间,(b,d]区间内的数都是大于[a,b)区间内的数 ;(2) 对(b,d]重复(1)操作,直到最右边的区间个数小于100个。 注意[a,b)区间不用划分 ;因为[a,b)区间一定小于(b,d]区间;(3) 返回上一个区间,并返回此区间的数字数目。 如果个数大于100,对(b,d]重复(1)操作,直到最右边的区间个数小于100个; 如果个数小于100,对上一区间的左边进行划分,分为

2016-05-10 17:01:04 3482

原创 二分查找与判定树

二分查找是一种效率比较高的查找算法,但是它依赖于数组有序的存储,二分查找的过程可以用二叉树来形容描述:把当前查找区间的中间位置上的结点作为根,左子表和右子表中的结点分别作为根节点的左子树和右子树。由此得到的二叉树,称为描述二分查找树的判定树(Decision Tree)或比较树(Comprision Tree)。时间复杂度为O(logN)。

2016-05-10 15:07:04 19842

转载 哈希表在Top-k问题中的应用--字符串

1、介绍       数组的特点是:寻址容易,插入和删除困难;        链表的特点是:寻址困难,插入和删除容易。        这个世界上有没有一种能够综合两者优点的,既寻址容易又插入和删除容易的数据结构?Yes,它就是Hash表。2、哈希散列方法      (1)除留取余法       (2)平方散列法       (3)Fibonacci散列法3、哈希表使

2016-05-10 11:32:24 1039 1

转载 大数据的处理方法<二>

海量数据面试题整理2013年11月02日 ⁄ 综合 ⁄ 共 15586字 ⁄ 字号 小 中 大 ⁄ 评论关闭1、给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?方案1:可以估计每个文件的大小为5G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。s

2016-05-09 22:24:48 1887

原创 fork()问题详解

最近在看linux编程方面的书,然后也在网上查阅相关的资料发现了一个关于fork()的几个题,在这里记录一下! #include "sys/types.h" #include "unistd.h" #include pit_t fork(void ); fork()函数调用成功,返回两个值; 父进程:返回子进程的PID; 子进程:返回0; 出错:返回-1、、、、

2016-05-08 19:07:53 6284 2

原创 进程与线程之间的区别及联系

一、定义:    1、进程:进程是一个具有独立功能的程序关于某个数据集合的以此运行活动。是系统进行资源分配和调度的独立单位,也是基本的执行单元。是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动。进程结构特征:由程序、数据和进程控制块三部分组成。具有独立性、并发性、异步性和动态性的特点。   (1)、进程的概念主要有两点:     第一,进程是一个实体。每一个

2016-05-08 16:27:33 2751

原创 linux下exit()和_exit()区别

linux下exit()和_exit()的用法及区别: exit和_exit作为系统调用而言,_exit和exit是一对孪生兄弟。通常我们会认为,他们之间没有什么区别:但是没有区别会有两个函数,你要知道程序猿虽然苦但不笨,这种事儿发生的概率比较低,所以答案是否定的。这种区别主要体现在它们在函数库中的定义,_exit在Linux函数库中的原型是:#include<unistd.h>void _exit(int status); (1)exit()函数定义在 stdlib.h中;而_

2016-05-07 22:22:31 1934

原创 wiat()与waitpid()

在创建进程后,为了避免僵尸进程,资源的浪费和进程数量的空闲占据,则需要对进程资源进行回收,这里主要看看wait和waitpid两个进程的功能与区别!!一、pid_t wait(int *status) 作用(1):清理结束的子进程资源或者得到进程执行后的返回信息; 进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出(主要是回收资源),如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找

2016-05-07 22:22:08 1615

原创 zombie僵尸进程、孤儿进程和守护进程

以前一直对僵尸进程和孤儿进程都没怎么理解,真是罪过,最近在看liunx编程设计(第四版),看到了他们的概念,所以对它们做个总结!加深印象。 基本概念: 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程再创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。 但是如果情况

2016-05-07 22:17:26 4871

原创 select poll epoll

虽然电脑没有意识,但是中断(阻塞与非阻塞)使硬件在某些方面具有了智能! 因为发现了缺点,所以计算机的大牛们一直在改进!所以才有了一系列的select、poll和epoll模型的诞生。为了适应不同的环境,新的发现和改进是无可避免的,只是为了技术更过硬,生活更美好。相比与select和poll模型,epoll模型的优点: (1) FD连接数量:Epoll它没有最大连接数的限制,只受进程打开描述符总数的限制; (2)I/O效率:epoll支持水平触发和边缘触发,最大的特点在于边缘触发,它只告诉

2016-05-07 17:55:49 819

转载 Epoll详解

什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44),它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。 epol

2016-05-07 16:13:18 768

原创 fork()、vfork()、clone()的区别

因为生活的复杂,这是一个并行的世界,在同一时刻,会发生很多奇妙的事情,北方下雪,南方下雨,这里在吃饭,那边在睡觉,有人在学习,有人在运动,所以这时一个多彩多姿的世界,每天都发生着很多事情,所以要想很好的表现这个世界,协调完成一件事儿,就得用到多进程或者多线程。所以进程是程序猿一定会接触到的一个东西,他能使我们的程序效率提高,高效的完成多任务,并行执行。

2016-05-07 10:35:30 17742 14

原创 exec函数

exec函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,主要是在fork()之后,它会诱导fork后的子进程另起炉灶,但是PID不变,自己开创一片新天地,清空原来的堆栈区、代码区和数据区,让新的可执行程序完全替代现有的资源。换句话说,就是在调用进程内部执行一个可执行文件,这里的可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件。与一般情况不同,exec、、、

2016-05-06 21:37:53 8167

原创 C++三种容器:list、vector和deque的区别

在写C++程序的时候会发现STL是一个不错的东西,减少了代码量,使代码的复用率大大提高,减轻了程序猿的负担。还有一个就是容器,你会发现要是自己写一个链表、队列,或者是数组的时候,既要花时间还要操心怎么去维护,里面的指针啊,内存够不够用啊,长度问题,有没有可能溢出啊等等一系列的问题等着我们去解决,还是比较头疼的。所以容器的出现解决了这一个问题,它将这些数据结构都封装成了一个类,只需要加上头文件,我们就可以轻松的应用,不用那么复杂,就连指针也被封装成了迭代器,用起来更方便,更人性化,方便了我们的编程、、、、

2016-05-06 17:35:26 59801 12

原创 iterator迭代器和指针的区别

迭代器与指针的差别:迭代器: (1)迭代器不是指针,是类模板,表现的像指针。他只是模拟了指针的一些功能,通过重载了指针的一些操作符,->,*,++ --等封装了指针,是一个“可遍历STL( Standard Template Library)容器内全部或部分元素”的对象, 本质是封装了原生指针,是指针概念的一种提升(lift),提供了比指针更高级的行为,相当于一种智能指针,他可以根据不同类型的数据结构来实现不同的++,--等操作; (2)迭代器返回的是对象引用而不是对象的值,所以c

2016-05-05 22:00:47 31033 10

常用linux命令速查表

一款很不错的常用linux命令速查表,舍弃了不常用的命令,让我们更好的玩儿转linux系统。

2015-08-03

quartuesii安装向导文件

下载了好久都没下载成功,并且软件都很大,所以找到了一个很好的quartuesii安装向导。quartuesii 11.0的软件安装向导,下载后先解压,然后加上可执行权限,sudo chmod 755 软件名,然后在执行./软件名,然后就跟安装软件一样安装了! 非常好的quartuesii安装向导。里面还有modusim 和相关的组建都是自动完成!

2014-10-28

linux及c语言库函数精华大全

linux下各种命令大全,还有c语言库函数大全,常用的命令非常齐全!对于初学c语言及linux和ubantu系统的爱好者有很大的帮助!希望可以帮助大家!

2014-04-25

linux下QT截屏小程序

linux下QT中很好的截屏程序,效果非常好!!对于初学者有一定的帮助!!希望可以帮到大家!

2014-04-25

ARM体系结构详解

很好的ARM体系结构讲解!对于初学者很有帮助!

2014-04-25

firefox27.0.1

最新的linux下的firefox浏览器!!

2014-04-25

conky配置汉化包

很好的conky配置汉化包,里面有相应的字体软件及操作说明!!

2014-04-25

空空如也

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

TA关注的人

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