- 博客(115)
- 收藏
- 关注
原创 指针和内存
C程序编译后,三种形式使用内存@静态/全局内存静态声明的变量和全局变量使用的内存都在这部分,所有函数能访问全局变量,静态变量的作用域则局限在定义他们的函数内部@自动内存这些变量在函数内部声明,并且在函数被调用时才创建。@动态内存内存分配在堆上作用域生命周期全局内存整个文件应用程序的生
2017-01-19 20:04:17
456
原创 strcpy sprintf memcpy 区别
strcpy 函数操作的对象是字符串,完成 从 源字符串 到 目的字符串 的 拷贝 功能。 sprintf 函数操作的对象 不限于字符串:虽然目的对象是字符串,但是源对象可以是字符串、也可以是任意基本类型的数据。这个函数主要用来实现 (字符串或基本数据类型)向 字符串 的转换 功能。如果源对象是字符串,并且指定 %s 格式符,也可实现字符串拷贝功能。 memcpy 函数顾名思义就是 内存拷
2016-12-26 21:33:56
512
转载 Linux网络编程 五种I/O 模式及select、epoll理解
五种I/O 模式:【1】 阻塞 I/O (Linux下的I/O操作默认是阻塞I/O,即open和socket创建的I/O都是阻塞I/O)【2】 非阻塞 I/O (可以通过fcntl或者open时使用O_NONBLOCK参数,将fd设置为非阻塞的I/O)【3】 I/O 多路复用 (I/O多路复用,通常需要非阻塞I/O配合使用)【4】 信号驱动 I/O (SIGIO)【5】 异步
2016-12-25 21:55:19
948
原创 双向冒泡排序
以整数升序排序为例来简单说明一下双向冒泡排序的过程:首先从前往后把最大数移到最后,然后反过来从后往前把最小的一个数移动到数组最前面,这一过程就是第一轮,然后重复这一过程,最终就会把整个数组从小到大排列好。双向冒泡排序要稍微优于传统的冒泡排序,因为双向排序时数组的两头都排序好了,我们只需要处理数组的中间部分即可,而单向即传统的冒泡排序只有尾部的元素是排好序的,这时每轮处理都需要从头一直处理到已经排好
2016-12-24 23:56:29
705
原创 指令周期、机器周期、’时钟周期
什么是指令周期?什么是机器周期?什么是时钟周期?三者之间的关系如何?指令周期 :取出并执行一条指令的时间。 机器周期 :又称CPU周期,CPU访问一次内存所花的时间较长,因此用从内存读取一条指令字的最短时间来定义。//机器周期=1/12·振荡周期时钟周期: 通常称为节拍脉冲或T周期。处理操作的最基本单位,即CPU主频。 三者的关系:指令周期通常用若干
2016-12-22 22:48:44
1271
转载 判断一个数是否为2的N次方问题
对于判断一个数是否为2的N次方问题,通常想到的最为直接的办法就是对这个数不断对2取余,为0就将该数变为该数除以2,直到最后该数为1为止。void judge(int n) { while(!(n % 2)) { n = n / 2; if(n == 1) { pri
2016-12-21 23:28:21
780
原创 多种排序法间的比较
冒泡排序 冒泡排序重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说排序完成。规模比较小的时候应用冒泡排序,主要应用于教学。。。选择排序--只会移动N次 选择排序的主要思想:首先找到数组中最小的那个元素,其次,将它和第一个元素交换。接下来找第二小
2016-12-20 23:18:02
304
原创 编程-青蛙跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2 级……它也可以跳上n 级,此时该青蛙跳上一个n级的台阶总共有多少种跳法?下面我们有数学归纳法分析一下这个问题: 用Fib(n)表示青蛙跳上n阶台阶的跳法数,青蛙一次性跳上n阶台阶的跳法数1(n阶跳),设定Fib(0) = 1; 当n = 1 时, 只有一种跳法,即1阶跳:Fib(1) = 1;
2016-12-19 22:39:12
881
原创 堆和栈的区别
简单的可以理解为: heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。 stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。 预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据
2016-12-18 23:22:18
342
转载 C/S和B/S
、C/S和B/S架构和区别和选择区别: 硬件环境不同: C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务. B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行 对安全要求不同 : C/S 一般面向相对固定的用户群
2016-12-17 23:32:08
337
原创 DNS原理
DNS原理及其解析过程为什么需要DNS解析域名为IP地址?网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通讯时只能识别如“202.96.134.133”之类的IP地址,而不能认识域名。我们无法记住10个以上IP地址的网站,所以我们访问网站时,更多的是在浏览器地址栏中输入域名,就能看到所需要的页面,这是因为有一个叫“DNS服务器”的计算机自动把我们
2016-12-16 23:11:52
697
转载 分形几何算法和实现
初识分形1、分形的含义:英文单词Fractal,它是由美籍法国数学家曼德勃罗(Benoit Mandelbrot)创造出来的。其含义是不规则的、破碎的、分数的。曼德勃罗是想用此词来描述自然界中传统欧几里得几何学所不能描述的一大类复杂无规的几何对象。2、分形的几何特征:自相似性:自相似,便是局部与整体的相似。自仿射性:自仿射性是自相似性的一种拓展。如果,将自相
2016-12-15 22:22:53
16622
原创 fork()进阶点
#include int main(int argc, char* argv[]) { fork(); fork() && fork() || fork(); fork(); printf("+/n"); } 答案是总共20个进程,除去main进程,还有19个进程。 我们再来仔细分析一下,为什么是还有19个进程
2016-12-13 22:07:26
286
原创 编程题-最短排序
题目: 对于一个无序数组A,请设计一个算法,求出需要排序的最短子数组的长度。 给定一个整数数组A及它的大小n,请返回最短子数组的长度。 测试样例: [1,5,3,4,2,6,7],7 结果:4 思路:在O(n)的时间复杂度中可以完成这道题。当然也有利用快排一次然后比较两个不同的个数来求长度。如果使用快排时间复杂度是O(nlogn)。对于O(n)的解法,举个例子[1,
2016-12-12 22:29:55
450
原创 编程题-实现蛇形输出
实现如下的蛇形输出:1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9 具体代码实现:[html] view plain copy #include stdio.h> #include mall
2016-12-11 22:29:04
875
原创 进程与线程
首先来一句概括的总论:进程和线程都是一个时间段的描述,是CPU工作时间段的描述。下面细说背景:CPU+RAM+各种资源(比如显卡,光驱,键盘,GPS, 等等外设)构成我们的电脑,但是电脑的运行,实际就是CPU和相关寄存器以及RAM之间的事情。一个最最基础的事实:CPU太快,太快,太快了,寄存器仅仅能够追的上他的脚步,RAM和别的挂在各总线上的设备完全是望其项背。那当多个
2016-12-08 23:04:56
272
原创 系统调用与库函数
系统调用:是操作系统为用户态运行的进程和硬件设备(如CPU、磁盘、打印机等)进行交互提供的一组接口,即就是设置在应用程序和硬件设备之间的一个接口层。可以说是操作系统留给用户程序的一个接口。一般地,操作系统为了考虑实现的难度和管理的方便,它只提供一少部分的系统调用,这些系统调用一般都是由C和汇编混合编写实现的,其接口用C来定义,而具体的实现则是汇编,这样的好处就是执行效率高,而且,极大的方便了上层调
2016-12-07 23:52:36
359
原创 机器大小端的检测
// 解释一下就是将 0x11223344 看作字符串 “0x11223344\0”;尾端:44; // 高端就是 “11 22 33 44” 进行存储;(大端) 地址 0 1 2 3 低地址--->高地
2016-12-06 23:10:11
440
原创 杨辉三角问题
杨辉三角形也叫贾宪三角形,西方叫帕斯卡三角形,其实就是各阶二项式系数排列起来构成的三角形,如下。每行的数字实际上是(a + b) ^ n展开后的结果。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1历史上发现这个三角形的人很多,这里介绍几个主要的,北宋人贾宪约1050年首先使用“贾宪三
2016-12-05 23:32:24
1012
原创 I/O多路转接
#include #include #include #include #include #include #include #include #include#include#include/* 宏定义端口号 */#define portnumber 8000#define MAX_LINE 80int main(void){ int lfd;
2016-12-04 23:34:12
351
转载 iic系列问题
面试的时候主要会遇到的IIC问题如下介绍一下你了解的I2C?I2C总线是飞利浦(PHLIPS)公司推出的一种串行总线,用于连接微控制器及其外围设备, I2C串行总线有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。 它仅通过两根信号线就可以完成对所有挂载在I2C总线上的从器件进行操作。这样的好处是可以大大的节省我们微处理器的IO口资源。I2C到底可以挂载多少个器件
2016-12-02 23:41:26
488
原创 操作系统-实验2
#include #include struct node{ int pid;//进程id号 int prio;//进程优先级 int runtime;//进程运行的时间 int alltime;//进程还需运行的时间 char state;//进程的状态 运行r,就绪j,阻塞b。 struct node *next;}; typedef struct nod
2016-12-01 22:50:23
312
原创 c语言练习题
1.进程和线程的区别进程是资源分配的最小单元,具有一定独立功能的程序的一次活动。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。1)简而言之,一个程序至少有一个进程,一个进程至少有一个线程.2) 线程的划分尺度小于进程,使得多线程程序的并发性高。3) 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运
2016-11-30 23:07:07
270
原创 C语言的宏定义和C++的内联函数有什么意义
宏是预编译器的输入,然后宏展开之后的结果会送去编译器做语法分析。宏与函数等处于不同的级别,操作不同的实体。宏操作的是 token, 可以进行 token的替换和连接等操作,在语法分析之前起作用。而函数是语言中的概念,会在语法树中创建对应的实体,内联只是函数的一个属性。对于问题:有了函数要它们何用?答案是:一:函数并不能完全替代宏,有些宏可以在当前作用域生成一些变量,函数做不到。二:内联函数只是
2016-11-29 22:51:54
545
原创 字符串匹配的Boyer-Moore算法
但是,它并不是效率最高的算法,实际采用并不多。各种文本编辑器的"查找"功能(Ctrl+F),大多采用Boyer-Moore算法。Boyer-Moore算法不仅效率高,而且构思巧妙,容易理解。1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了这种算法。下面,我根据Moore教授自己的例子来解释这种算法。1.
2016-11-28 22:52:04
234
转载 起自TCP三次握手
说到TCP协议,相信大家都比较熟悉了,对于TCP协议总能说个一二三来,但是TCP协议又是一个非常复杂的协议,其中有不少细节点让人头疼。本文就是来说说这些头疼点的,浅谈一些TCP的疑难杂症。那么从哪说起呢?当然是从三次握手和四次挥手说起啦,可能大家都知道TCP是三次交互完成连接的建立,四次交互来断开一个连接,那为什么是三次握手和四次挥手呢?反过来不行吗?疑症一:TCP的三次握手、四次挥手
2016-11-27 22:45:12
382
转载 聊天室-界面-curses
1. curses 的历史与版本: cureses 最早是由柏克莱大学的 Bill Joy 及 Ken Arnold 所发展出来的. 当时发展此一函式库主要原因是为了提高程式对不同终端机的相容性而设计的. 因此, 利用 curses 发展出来的程式将和您所使用的终端机无关. 也就是说, 您不必担心您的程式因为换了一部终端机而无法使用. 这对程式设计师而言, 尤其是网路上程式的撰写,
2016-11-26 23:25:53
1550
原创 矩阵的乘法算法
一般矩阵乘法算法:原理:矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的栏数(column)和第二个矩阵的列数(row)相同时才有定义。一般单指矩阵乘积时,指的便是一般矩阵乘积。若A为m×n矩阵,B为n×p矩阵,则他们的乘积AB会是一个m×p矩阵。其乘积矩阵的元素如下面式子得出:代码如下:struct mat{ int n, m; doubl
2016-11-25 23:47:00
7331
转载 多线程的聊天室实现-服务器端
服务器端的主要功能: 实现多用户群体聊天功能(此程序最多设定为10人,可进行更改),每个人所发送的消息其他用户均可以收到。用户可以随意的加入或退出(推出以字符串“bye”实现),服务器也可以进行关闭。 服务器端的程序结构: 总共有三个函数:主函数(main),实现服务器端的初始化,接受连接;消息处理函数(rcv_snd),接受某一用户的消息,将其进行简单处理之后发送给其他所有的用户;退
2016-11-24 23:27:40
718
转载 条件编译
这几个宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。 条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2
2016-11-23 23:11:02
410
原创 操作系统实验四:独占设备的静态分配模拟
实验4:独占设备的静态分配模拟实验内容:(1)设计设备类表的结构,根据模拟的要求,自己决定必须设置的字段 (2)设计设备分配表的结构,根据模拟的要求,自己决定必须设置的字段 (3)编程实现独占设备的静态模拟程序copyright (C), 2014-2015, Lighting Studio. Co., Ltd. File name:Author:hxj
2016-11-22 16:17:19
3218
1
转载 C和C++中struct和typedef struct的分析
分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明) 这里的Stu实
2016-11-21 23:39:39
232
原创 快速幂取模算法
所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速的求一个幂式的模(余)。在程序设计过程中,经常要去求一些大数对于某个数的余数,为了得到更快、计算范围更大的算法,产生了快速幂取模算法。我们先从简单的例子入手:求abmodc算法1.直接设计这个算法:int ans = 1;for(int i = 1;i{ ans = ans * a;}ans = an
2016-11-20 22:50:06
502
原创 Gnome排序(地精排序)
Gnome排序(地精排序),起初由Hamid Sarbazi-Azad 于2000年提出,并被称为stupid排序,后来被Dick Grune描述并命名为“地精排序”,作为一个排序算法,和插入排序类似,除了移动一个元素到最终的位置,是通过交换一系列的元素实现,就像冒泡排序一样。概念上十分简单,不需要嵌套循环。时间复杂度为O(n2),但是如果初始数列基本有序,时间复杂度将降为O(n)。实际上Gnom
2016-11-19 23:44:09
1126
原创 希尔排序
希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:· 插入排序在对几乎已经排好序的数据操作时,效率高, 即可以达到线性排序的效率· 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位 算法原理原始的算法实现在最坏的情况下需要进行O(n2)的比较和交换。V.
2016-11-18 23:35:26
370
原创 字符串匹配-暴力搜索算法
主要特征1、没有预处理阶段2、需要常量额外空间3、通常需要模式串窗口向右移动一个位置4、可以按照任意顺序进行比较5、搜索的时间复杂度为O(mn)6、文本字符期望比较次数:2n算法描述暴力搜索算法由文本串中从0到n-m所有位置的比较组成,无论是否从模式串的起始位置开始,每次匹配过后,模式串向右移动一位。暴力搜索算法没有预处理阶段,文本串和模式串需要常量额外空间,在搜索
2016-11-17 23:02:36
3601
转载 常用汇编指令
1、 MOV(传送) 指令写法:MOV target,source 功能描述:将源操作数source的值复制到target中去,source值不变 注意事项:1)target不能是CS(代码段寄存器),我的理解是代码段不可写,只可读,所以相应这地方也不能对CS执行复制操作。2)target和source不能同时为内存数、段寄存器(CS\DS\ES\SS\FS\GS)3)不能将立即数传送
2016-11-16 22:41:58
457
转载 LINUX网络服务器
一、在之前设计的网络编程服务器中,涉及到的服务器都是最为简单的、一对一的服务器,也就是只与一个客户端建立通信。然而在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求, 对服务端的程序就提出了特殊的要求。二、循环服务器和并发服务器1、循环服务器:循环服务器描述了在一个时刻只处理一个请求的服务器实现方式,通过在单线程内设置循环控制实现对多个客户端请求的逐一响应,这种
2016-11-15 23:06:19
309
原创 链表找环方法注解
编程判断两个链表是否相交,原题假设两个链表不带环。 问题本身的解答并不是本文的重点。用指针p1、p2分别指向两个链表头,不断后移;最后到达各自表尾时,若p1==p2,那么两个链表必相交 扩展问题1:如果链表可能有环,上面的方法怎么调整?分情况讨论:如果两个链表都没有环,那么同原算法;如果两个链表一个有环,一个没环,那么必然不相交。(*)如果两个链表都有环
2016-11-14 22:44:59
358
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人