自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TopK问题,在海量数据中寻找最大的K项

海量数据都是不能直接存储在内存里的,只能先拿出一小部分放在内存里,再逐渐从内存拿出小的,放入大的。   处理这样的问题有以下几种方法   1.用堆排序,用小堆。小堆的堆顶是整个堆中数目最小的。先拿出K个数建立一个小堆,每次拿出一个数与堆顶数据相比,若比堆顶数据大,则将两个数据交换,重新调整堆。保证还是一个小堆。   2.分治法,将海量数据分成若干份,在每份中找出最大的K个数,再从剩下的数中选取

2017-08-11 23:23:56 525

原创 linux下 socket tcp Server c语言编写(分别实现单进程,多进程,多线程)

TCP 迭代服务器接受一个客户端的连接,然后处理,完成了这个客户的所有请求后,断开连接。TCP 迭代服务器一次只能处理一个客户端的请求,只有在这个客户的所有请求满足后,服务器才可以继续后面的请求。如果有一个客户端占住服务器不放时,其它的客户机都不能工作了,因此,TCP 服务器一般很少用迭代服务器模型的。tcp服务器端框架 1.创建tcp套接字 2. 绑定套接字 3. 监听套接字 4.

2017-08-05 22:26:42 8717 2

原创 关于两个链表的交点的小结

对于链表可分为有环和无环,对于两个链表的关系可分为相交和不相交 那么两个链表的相交分为哪几种情况呢? 可以简单的分为六种情况 **1.两个无环且不相交 2.两个无环相交 3.一个有环不相交 4.两个有环不相交 5.两个有环相交,交点不在环上 6.两个有环相交,交点在环上** 下面画一张图就可以清楚的看到这几种情况 这六种情况又可以分为三种情形考虑 第一种情形 把第一种和

2017-07-18 19:12:55 533

原创 在linux下用c和shell编写彩色进度条

进度条 显示在屏幕上的进度条一般分为三部分 1. 显示已经执行了多少 2. 执行多少占的百分比 3. 一个转盘 先来说一下普通的进度条 对于显示执行多少,一般都会预留100个空间,每0.1秒完成1% 对于执行占的百分比,用循环i来实现,每循环一次,i+1,刚好是循环占的百分比 对于转盘,用一个数组实现,数组中有四个元素\ | - /,当这四个元素依次循环时,出现一个简单的转盘。

2017-07-15 17:14:18 634

原创 shell 语法 shell命令 用shell编写进度条

`和()都是命令替换符。由反引号括起来的也是⼀条命令,Shell先执⾏该命令,然后将输出结果⽴刻代换到当前命令⾏中。命令代换也可以⽤()都是命令替换符。 由反引号括起来的也是⼀条命令,Shell先执⾏该命令,然后将输出结果⽴刻代换到当前命令⾏中。命令代换也可以⽤()表⽰: DATE=(date)(date) (())⽤于算术计算,(())中的Shell变量取值将转换成整数,例如:(())中的

2017-07-14 15:58:01 722

原创 Shell脚本中反引号`和$()的区别

`和()都是命令替换符。由反引号括起来的也是⼀条命令,Shell先执⾏该命令,然后将输出结果⽴刻代换到当前命令⾏中。命令代换也可以⽤()都是命令替换符。 由反引号括起来的也是⼀条命令,Shell先执⾏该命令,然后将输出结果⽴刻代换到当前命令⾏中。命令代换也可以⽤()表⽰: DATE=(date)(date) (())⽤于算术计算,(())中的Shell变量取值将转换成整数,例如:(())中的

2017-07-12 23:50:59 1132

原创 select

select用于探测多个句柄状态的变化 #include <sys/select.h> #include <sys/time.h> #include <sys/types.h> #include <unistd.h>int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct tim

2017-07-12 17:17:31 764

原创 udp用户数据报协议的实现

1 udp的简介 UDP—用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。 2 实现udp所使用的函数 socket 函数:创建一个通信点,返回一个文件描述符#include <s

2017-07-11 22:17:19 861

原创 NAT技术与代理服务器

*1.NAT技术* NAT(Networ Address Translation)网络地址转换,是将不能在网络上路由的私有地址转换成合法的IP地址。 NAT技术产生之前,internet广泛使用IPv4技术,随着网络用户的迅速增加和IPv4技术本身的不足,导致IPv4地址短缺,用户的接入出现了困难,为了弥补这个缺陷,产生了NAT技术。使用NAT技术可以使多个用户使用有限个(一个)

2017-07-08 20:09:27 238

原创 mysleep与竞态条件下的mysleep

1.编写代码实现sleep功能 利用pause()和alarm()函数来实现 <1> 用alarm()设置闹钟#include<unistd.h>unsigned int alarm(unsigned seconds);alarm函数可以设置一个闹钟,及让内核在seconds秒之后发送一个SIGALRM信号该信号的默认处理动作是终止该进程; <2> 用pause()等待,内核切换到其他进程运

2017-07-05 23:09:32 465

原创 子进程的异步等待

父进程在创建子进程时,会调用wait或waitpid清理僵尸进程。#include<sys/types.h>#include<sys/wait.h>等待函数1: pid_t wait(int*status); 返回值:成功返回被等待进程pid,失败返回-1。 参数: 输出型参数,获取⼦进程退出状态,不关⼼则可以设置成为NULL 等待函数2: pid_t waitpid(pid_t pid

2017-06-29 20:33:52 229

原创 crc 循环校验码

1.CRC介绍 CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。 2.CRC校验的过程 (1)将上次计算出的CRC校验码右移一个字节; (2)将移出的这个字节与新的要校验的字节进行XOR 运算; (3)用运算出的值在预先生成码表中进行索引,获取对应的值(称为余式); (

2017-06-28 22:55:14 409

原创 守护进程

1.什么是守护进程 守护进程也称精灵进程( Daemon),是运⾏在后台的⼀种特殊进程。它独⽴于控制终端并且周期性地执⾏某种任务或等待处理某些发⽣的事件。守护进程是⼀种很有⽤的进程。 Linux系统启动时会启动很多系统服务进程,这些系统服 务进程没有控制终端,不能直接和⽤户交互。其它进程都是在⽤户登录或运⾏程序时创建,在运⾏结束或⽤户注销时终⽌,但系统服务进程不受⽤户登录注销的影

2017-06-28 11:34:12 267

原创 crond和crontab

1.简介 crond的概念和crontab是不可分割的。crontab是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于”crontab”文件中,以供之后读取和执行。crond正是它的守护进程。 crontab是一个很方便的在unix/linux系统上定时(循环)执行某个任务的程序使用cron服务,用 se

2017-06-27 20:28:25 255

原创 僵尸进程与孤儿进程

在linux中子进程是由父进程创建的。如果进程出现异常就出现一些问题,僵尸进程和孤儿进程。 孤儿进程:一个父进程退出,而他的子进程还在运行,那么子进程将会成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养。 僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。 下面用例子来了解

2017-06-26 22:55:55 249

原创 用链表实现生产者消费者模型

生产者消费者模型:有一群生产者在生产产品,并将这些产品提供给消费者去消费。为使生产者进程和消费者进程能并发执行,在两者之间设置缓冲区,生产者进程将其所生产的产品放入缓冲区中;消费者进程可从缓冲区中取走产品进行消费。尽管所有的生产者进程和消费者进程都是以异步方式运行的,但它们之间必须保持同步,既不允许消费者进程到空缓冲区去取产品,也不允许生产者进程想一个已装满产品的缓冲区中投放产品。在实际的开发

2017-06-17 20:41:49 904 1

原创 二叉树

二叉树是一棵特殊的树,它最多有两个孩子结点,左孩子和右孩子 1.建立二叉树 二叉树一个结点指针所指向的内容包含三项,该结点的值,指向左孩子的指针和指向右孩子的指针。所以需要建立一个结构体包含这三项内容struct BinaryTreeNode{ BinaryTreeNodeT> *_left; BinaryTreeNodeT> *_right; T _data;

2017-04-17 22:49:56 243

原创 关于linux目录权限的简单介绍

1.进入目录需要的权限(1).取消执行权限取消执行权限后,目录不能打开(2).取消读权限取消读权限后,目录依然可以打开(3).取消写权限取消写权限后,目录依然可以打开综上,进入一个目录需要的权限是执行权限。2.查看并在目录内创建文件

2017-03-19 20:20:15 236

原创 多态原理

多态就是当使用基类的指针或引用重写的虚函数时,当指向父类调用就是父类的虚函数,当指向子类调用就是子类的虚函数。多态的实现是重写基类的虚函数。重写虚函数要求参数名,函数列表,返回值完全相同。下面以一个实例介绍一下多态的原理#includeusing namespace std;class AA{public: void virtual fun() { cout << "

2017-02-15 23:17:24 247

原创 C语言 模拟实现memmove

memmove考虑到了字符重叠的问题,因此可能出现以下三种情况第一种dest与src有重叠,src>dest,这种情况只需按照平常的拷贝方式,从前往后拷贝第二种dest与src有重叠,src出现这种情况,便要从后往前拷贝第三种dest与src无重叠部分,从前往后,从后往前都可以(下面程序中所用的为从前往后)程序代码如下#include

2016-11-06 21:26:33 365

原创 C语言 模拟实现strcmp strncmp

strcmp的作用是比较两个字符串的大小

2016-11-06 16:55:05 347

原创 C语言实现三子棋

三子棋的实现是当玩家或者电脑下的位置连成线时即可判断为赢。在编写时要注意到(1)每次玩家或者电脑玩之后都要打印一次棋盘(2)每次下一步棋,打印棋盘后,都要判断是否已经赢了(3)判断输赢之后判断棋盘是否已 满(4)电脑是随机的位置,要判断该随机的位置在之前是否已经被占用,若已经被用则要重新生成随机位置, 直到该位置还没有被占用头文件chess.h#ifndef _CH

2016-10-30 23:18:59 416

原创 C语言编写扫雷小游戏

扫雷游戏当选择的位置不是雷时,该位置显示周围的雷的数目,踩到雷则游戏结束头文件mine.h#ifndef _MINE_H_#define _MINE_H_#define ROWS 9#define COLS 9#define NUM 10 //设置雷的个数enum ENUM;void menu();void sweep(int rows, int cols, char

2016-10-22 21:19:58 793

原创 模拟实现strcpy strncpy

strcpy的作用是将一个字符串的内容复制到另外一个字符数组中,包括字符串的终结符#include #include#includechar * my_strcpy(char *dest, const char *src){ assert(dest != NULL); assert(src != NULL); char *ret = dest; while (*dest++ =

2016-10-20 17:43:13 1209

原创 预处理标识符: __LINE__ __FILE__ __DATE__ __TIME__ ##

1.__LINE__在LINE前后各有两个下划线。LINE的用途是打印当前行的行号#include int main(){ printf("%d\n", __LINE__); system("pause"); return 0;}__LINE__所在行为5,所以输出值为52.__FILE____FILE__的用途是打印当前为件的位置#inc

2016-10-18 23:10:50 420

原创 C语言 打印图案

打印类似菱形图案 * *** ***** ******* ********* ************************ *********** ********* ******* ***** *** *

2016-09-27 21:11:39 1205

原创 C语言 编写登录系统

可进行三次密码输入,若三次全部输入错误,则退出系统

2016-09-27 21:02:58 11644 1

原创 C语言 获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列

#define _CRT_SECURE_NO_WARNINGS 1#include "stdio.h"int main(){ int num = 10; int i = 0; printf("Please enter the num:\n"); scanf("%d", &num); int a[32]; for (; i < 32; i++) { a[i] = num %

2016-09-27 20:16:35 547

原创 C语言编写代码,演示多个字符从两端移动,向中间汇聚

#include "stdio.h"#include "string.h"#include "windows.h"int main(){ char arr1[] = { "welcome to china!" }; char arr2[] = { "#################" }; int left = 0; int right = strlen(arr1) - 1;

2016-09-26 15:20:59 771

原创 c语言编写猜数小游戏

#define _CRT_SECURE_NO_WARNINGS 1#include "stdio.h"#include #include void menu(){ printf("*******************\n"); printf("******1.play*******\n"); printf("******0.exit*******\n"); printf("*

2016-09-25 15:32:16 606

原创 C语言不创建临时变量,交换两个整型的值

第一种方法,#include "stdio.h"int main(){ int a = 0; int b = 0; scanf("%d%d",&a,&b); a = a^b; b = a^b; a = a^b; printf("a=%d b=%d\n",a,b); system("pause"); return 0;}第二种方法#include "std

2016-09-19 22:44:45 318

原创 C语言打印1000-2000年里的闰年

#include "stdio.h"int main(){ int year; int i ; for (year = 1000; year <= 2000; year++) { if (year % 4 == 0) { i = 0; if (year % 100 == 0) { if (year % 400 == 0) i = 1;

2016-09-16 13:59:16 447

原创 C语言打印九九乘法表

#include "stdio.h"int main(){int i, j, z;for (i = 1; i for (j = 1; j {z = i*j;printf("%d*%d=%d ",j,i,z);if (i == j)printf("\n");}getch();return 0;}

2016-09-13 13:17:32 382

空空如也

空空如也

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

TA关注的人

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