• 等级
  • 34487 访问
  • 32 原创
  • 0 转发
  • 116815 排名
  • 2 评论
  • 6 获赞

IO多路复用之select和epoll(详细注释)

select:#include #include #include #include #include #include #include #include void usage(char * argv) { printf( "%s\n",argv); } int startup(char * ip,int port) {

2016-08-13 17:36:32

网络端口的分类

1.公认端口(Well Known Ports):这类端口也常称之为"常用端口"。这类端口的端口号从0到1024,它们紧密绑定于一些特定的服务。通常这些端口的通信明确表明了某种服务的协议,这种端口是不可再重新定义它的作用对象。例如:80端口实际上总是HTTP通信所使用的,而23号端口则是Telnet服务专用的。这些端口通常不会像木马这样的黑客程序利用。为了使大家对这些常用端口多一些认识,在本章后面

2016-08-06 22:29:40

删除元素使迭代器失效

迭代器提供一种方法能够访问一个容器里面的数据,而又不用暴露该容器内部的表达式,设计思想是将数据容器和算法分开,然后利用迭代器这个粘合剂将他们撮合在一起。 迭代器的使用要注意失效问题。(erase返回被删除迭代器的下一个迭代器) 对于顺序容器的失效: void test() { vector v = { "aaaaaaaaaa", "bbbbbbbbbb", "ccccccc

2016-08-04 23:14:32

IP数据报文的分片和组装

分片:MTU(Maximum Transmission Unit,MTU),最大传输单元 ,以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492个字节。链路层的这个特性称作MTU。不同类型的网络大多数都有一个上限。如果IP层有一个数据要传,且数据的长度比链路层的MTU还大,那么IP层就要进行分片(fragmentation),把数据报分成若干片,这样每一个分片都小于MTU

2016-08-03 09:21:01

路由表及其建立算法

一.路由表 1.路由表仅指定从该路由器到目的地路径上的下一步,而不知道到达目的地的完整路径,标准的IP路由表包含许多对序偶,N表示目的网络的IP地址,R表示到N路径上的下一个路由器的IP地址。 2、从Datagram中提取目的IP地址D,计算netid网络号N,if N与路由器直接连接的,ElseIf RoutingTable中包含到N的路由,Then 将Datagram发送到Routin

2016-08-03 01:02:54

利用哈夫曼树进行文件压缩

项目描述: 项目简介:利用哈夫曼编码的方式对文件进行压缩,并且对压缩文件可以解压 开发环境:windows vs2013 项目概述:                  1.压缩          a.读取文件,将每个字符,该字符出现的次数和权值构成哈夫曼树  b.哈夫曼树是利用小堆构成,字符出现次数少的节点指针存在堆顶,出现次数多的在堆底  c.每次取堆顶的两个数,再将两个数

2016-07-25 00:43:07

寻找最小的k个数,处理海量数据的思想

题目:在n个数中找出最小的k个数,例如在1,3,5,7,9,2,4,6,8,10中找出最小的4个数,那么结果就为1,2,3,4 分析:最为直接的办法就是将这n个数先进行排序,然后再取出前k个即为最小的k个数,但这绝对得不到面试官的青睐,因为这样做太笨拙。现在可以将数据插入到小堆中,然后将前堆前面的K个数输出就可以。 class Heap //建立小堆 { public:

2016-07-07 11:24:16

AVL树的插入和检查

所以还是满足左路节点小于根节点根节点小于右路节点。 现对AVL的插入算法进行实现,方法是先将每个节点按二叉搜素树的方式进行插入,然后再根据AVL树的性质对插入的节点做相应的调整,使其满足AVL树的性质。 里面涉及到左旋,右旋,一级左右旋和右左旋。 左旋为: 右旋为: 左右旋: 右左旋: 现在按图进行代码实现: template stru

2016-06-23 23:48:43

二叉搜索树的增删查改

二叉搜索树注重增删查改,现在针对key/value形式进行研究。 现在对其进行实现,分别有插入,查找,删除,分别对这几个功能用递归和非递归实现。          其中删除操作比较特别,分为3种,分别是删除叶子节点,删除左为空或右为空的节点,第三种是删除左右子树都不为空的节点。最后一种删除最麻烦,它分为三个步骤,分别是找出右树的最左节点,然后和要删除的节点进行key/value的互换,然

2016-06-17 23:43:35

BitMap的原理及使用

位图:位图的原理就是用一个bit来标识一个数字是否存在,采用一个bit来存储一个数据,所以这样可以大大的节省空间。 例如一个int型有32bit,那么就可以用这32个bit来存储0~31这些整型数据,所以可以将1~31这些数据仅用1个bit来存储,这样节省了空间。 例如要存储3,7,4,8 主要把握的是映射关系 代码实现: class BitMap {

2016-06-08 20:41:13

基数排序

原理是按每一位进行对数组的排序,例如: 代码实现: int GetDigit(int * parr,int size)//获取最大数的位数 { int max = parr [0]; for (int i = 1; i <= size;i++) {

2016-06-08 17:48:01

冒泡排序的优化及最好最差情况

最开始学习的时候并没有对其进行深入的思考,现在对其进行总结,冒泡排序的思想也就不需要赘述。 最开我们会将数列进行n-1趟排序,每趟又进行一个循环的冒泡,如果是升序,我们就会将相邻的两个元素进行比较,将大的元素一直向后面“沉”,直到所有循环结束,这是数列也就被我们排序完成。 代码如如下: void BubbleSort(int* parr,int size)//冒泡排序(升序) {

2016-06-05 20:31:22

直接选择排序和它的优化

直接选择排序是一种比较直观的排序,它是从一个无序的额数组中选择一个最小或最大的并将这个最大的放在数组的开始或末尾,现在进行代码的实现: /****/ if (parr [j] /********************/ 现在这个选择排序还有很大的优化空间,上述的方法的时间复杂度为O(n^2)。现在的优化方式是同时选出他的最大的和最小的。 代码实现: void Se

2016-06-02 17:14:00

Linux下进度条

功能:模拟1到100的进度条,每次显示打印了百分之多少 首先要明白几个转义字符在不同平台的功能: \r : return 到当前行的最左边。 \n: newline 向下移动一行,并不移动左右。 Linux中\n表示回车+换行; Windows中\r\n表示回车+换行。 Mac中\r表示回车+换行。 现在进行实现:

2016-06-02 11:08:45

Linux背景

Linux的性质,Linux是一种基于冯诺依曼的操作系统,与windows性质相同,只是windows普及程度更高,Linux的普及程度较低。虽然Linux普及程度较低,但是他的一些有点也是我们不可忽视的。Linux具有很强的稳定性和高效性,连续运行较长时间也不是问题,例如,一般Linux可以作为服务器的操作系统,这样可以保证服务器长久性的工作。 Linux对机器配置的要求较低,不需要一直升级机器

2016-05-30 10:47:05

二叉树

1.树的节点:节点包含数据和指向其它节点的指针,因为不知道有几个指向其它节点的指针呢个,所以树的结构变得难以定义(因为子节点的个数是未知的),这是可以采用左孩子和右兄弟的表示方法,左孩子可以访问左子树的节点,用右子树可以一直往下访问它的兄弟节点,这样就可以实现树的定义和访问。2.二叉树:对于二叉树,它只有左子树和右子树,所以二叉树就不难表示,二叉链中包含数据,指向左子树的指针和指向右子树的指针,三

2016-05-30 10:47:02

回溯法解决迷宫问题

现在有迷宫地图:(回溯法)1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 10 0 0 1 1 1 1 1 1 11 1 0 1 1 1 1 1 1 11 1 0 1 1 1 1 1 1 11 1 0 1 1 1 1 1 1 11 1 0 0 0 0 0 0 1 11 1 0 1 1 1 1 0 1 11 1 0 1 1 1 1 0 1 11 1 0 1 1 1 1 1

2016-05-30 10:46:59

两个队实现栈

我们知道队的特点是先进先出,元素只能从队的尾部进入,只能从队的尾部出来;栈的特点是先进先出,先进栈的元素被压入栈底,后进入的元素覆在栈顶,出栈时也只能从栈的顶部出来。所以我们要借用两个队来实现栈的功能,先不用栈自身的属性却可以实现栈的属性。(队用链表来实现)  现有两个队,我们将他们分别记为Qin,Qout,开始是将元素插入到Qin中,然后将将除了队尾的元素全部保存到Qout中,保存的过程中依次将

2016-05-30 10:46:55

万年历软件各个接口功能的实现

万年历软件可以实现日历显示,日历查询,日历修改,日期备忘录,信息帮助这些功能:#include#include"CalendarTable.h"#includeint main(){CalendarTable();system("pause");return 0;}/******************************************************************

2016-05-30 10:46:52

c注释转换成c++注释

对于代码来说注释是非常重要的,因为这样可以提高自己写的代码的刻度性,现在实现c转换成c++注释的功能,可以将眼花缭乱的注释方式总结成8个种类,分别是:// 1.一般情况/* int i = 0; */// 2.换行问题/* int i = 0; */int j = 0;/* int i = 0; */int j = 0;// 3.匹配问题/*int i = 0;/*xxxxx*/// 4.多行注释

2016-05-30 10:46:49

qingqiulengya

关注
  • 计算机软件
  • 中国 陕西省 西安市