![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
项目
文章平均质量分 67
午饭要阳光
热爱编程
展开
-
C注释风格转化为C++风格注释
C转C++可能遇到的问题://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-11 12:40:23 · 1475 阅读 · 0 评论 -
C++实现五子棋游戏
三子棋、五子棋之类的游戏,非常简单,对于初学者来说是一个不错的练手的小项目,以前用C语言写过三子棋游戏。最近在看C++,所以就想到在三子棋的基础上利用C++语言实现五子棋游戏。主要功能: 有3个模式:0表示退出、1表示电脑vs玩家、2表示玩家vs玩家。 当一局完成之后选择’y’则又会进入选择模式。 源代码(VS2013编译器下写的):#include<iostream>#include<st原创 2017-01-23 11:45:14 · 33150 阅读 · 9 评论 -
huffman算法---文件压缩
利用huffman编码的思想对文件进行压缩,主要原理是通过huffman编码来重新表示字符,使得出现频率高的字符编码短,出现少的字符编码长。整体下来的话,所需的总的bit位是减少的。但是要注意当大部分字符出现的频率都差不多时,huffman压缩的压缩效率会很低。一、利用huffman树对文件进行压缩主要分为以下两部分:压缩:1、统计字符出现的次数 因为文件的底层原创 2016-10-30 23:04:53 · 2242 阅读 · 0 评论 -
LZ77压缩
在huffman压缩中,对于字符不再使用定长编码。我们利用字符出现的次数之间的差异,对字符重新进行编码,使得出现次数多的字符编码短,而出现次数少的字符编码长,这样的话整体来说,需要的总的bit位数就会下降,以此来达到压缩的目的。可见,在这种情况下,如果字符出现的次数大致都相等的话,就起不到压缩的效果了,这也就是huffman为什么不能进行二次压缩的原因,因为压缩一次之后,会使得所有字符出现的次数相差原创 2017-03-04 20:27:08 · 5203 阅读 · 0 评论 -
通讯录第四版
最近在看mysql,想起以前写过通讯录,所以就想着将通讯录中的内容存储到mysql中注意:下面出现的book是我的数据库中一张表的名字,它的字段是(name,tel,mail,addr)。根据情况自己替换 #include<stdio.h>#include<stdlib.h>#include<string.h>#include<mysql.h>#define SIZE 1024MYSQL原创 2017-03-25 20:52:47 · 1328 阅读 · 0 评论 -
天气推送服务器
1、主要功能 用户通过天气推送服务器暴露出来的接口进行注册,注册完毕之后用户可以添加一些自己的亲朋好友的信息。每天定时爬取全国的天气,然后推送给用户的亲朋好友。 2、服务器 服务器使用的是一个协程版本的web服务器,支持get和post方法,底层用CGI方法处理带参数的请求。服务器对外暴露两个接口,用来进行注册和登录。 要登录的话,必须要有一个账号和密码,可以通过注册原创 2017-05-11 15:32:41 · 3422 阅读 · 0 评论 -
网络畅聊系统
1、网络聊天系统简介 简单来说,这个聊天系统可以达到群聊的目的。客户端向服务器发送消息,服务器对这条消息进行转发。由于使用的是udp协议,所以服务器会维护一张用户列表,这个列表记录了所有向服务器发送过消息的客户地址。当某个客户端退出的时候,会向服务器发送一条特殊的指令,然后服务器将该客户地址从用户列表中删除。2、Udp聊天系统原理图 从上图可以看到,服务器端使用生产者消费者模型原创 2017-05-12 10:23:18 · 2603 阅读 · 0 评论 -
半同步/半反应堆线程池
一、什么是线程池 线程池是服务器预先创建的一组线程,这些线程运行着相同的代码,并具有相同的属性。当有新的任务到来的时候,主线程通过某种方式选择线程池中的某一个线程来为之服务,服务完之后又放回线程池中。二、为什么要有线程池 相比于动态创建线程来说,线程池可以提高速度。因为线程的创建和销毁是需要时间的,如果我们预先创建好,用完之后再回收的话,则会节省不少时间。一般线程池中线程的数量原创 2017-05-28 21:21:04 · 2584 阅读 · 0 评论 -
大数运算
一、为什么要有大数运算 在C/C++编程语言中,整型的最大存储类型是long long类型,大小是8个字节,一但超出这个范围,则就无法用编程语言的内置类型存储。因为编程语言的存储范围有限,所以它不能满足较大规模的高精度的计算,于是就产生了大数运算这种方法。二、大数运算原理 由于内置类型的存储范围有限,所以我们可以将大数转换成字符串存储在数组里面,然后再对每一位做单独的加减乘除运原创 2017-05-31 18:47:14 · 1781 阅读 · 0 评论 -
LRU缓存策略设计
一、什么是LRU缓存策略 LRU(Least Recently Used)近期最少使用算法。它的原理就是,缓存一定量的数据,当缓存数量超过设置的阈值时就删除一部分旧的数据。 那么我们怎样判定旧数据呢???根据局部性原理,距离当前最久没有被访问过的数据应该被淘汰。二、LRU缓存策略实现原理 1、使用双向链表记录数据的被使用的时间 因为我们要删除最久没有被访问的数据原创 2017-06-02 11:53:28 · 1818 阅读 · 2 评论 -
如何设计一个简单内存池
什么是内存池??? 通常我们用new或malloc来分配内存的话,由于申请的大小不确定,所以当频繁的使用时会造成内存碎片和效率的降低。为了克服这种问题我们提出了内存池的概念。内存池是一种内存分配方式。内存池的优点就是可以有效的减少内存碎片化,分配内存更快速,减少内存泄漏等优点。 内存池是在真正使用内存之前,先申请分配一个大的内存块留作备用。当真正需要使用内存的时候,就从内存池中分配一块原创 2016-12-04 20:59:39 · 6462 阅读 · 4 评论 -
揭秘——STL空间配置器
为什么要有空间配置器呢?这主要是从两个方面来考虑的。1、小块内存带来的内存碎片问题 单从分配的角度来看。由于频繁分配、释放小块内存容易在堆中造成外碎片(极端情况下就是堆中空闲的内存总量满足一个请求,但是这些空闲的块都不连续,导致任何一个单独的空闲的块都无法满足这个请求)。2、小块内存频繁申请释放带来的性能问题。 关于性能这个问题要是再深究起来还是比较原创 2016-12-07 23:07:10 · 5172 阅读 · 0 评论 -
贪吃蛇游戏实现
#include#include#include#include#includeusing namespace std;enum{ U, D, L, R};typedef struct Coor{ int _x = 0; int _y = 0; Coor(int x = 0, int y = 0) :_x(x) , _y(y){}}Coor;原创 2016-09-16 19:45:53 · 1409 阅读 · 0 评论 -
通讯录--第一版
//基于顺序表实现的简易通讯录-----1#define _CRT_SECURE_NO_WARNINGS 1#include#include#includetypedef struct stu //定义一个学生信息的结构体类型{ char name[20]; char sex[6]; int age; char tele[20]; c原创 2016-05-11 12:25:21 · 533 阅读 · 0 评论 -
三子棋游戏
#include#include#includevoid chess_board(char arr[3][3]) //打印棋盘{ int i = 0; int j = 0; for (i = 0; i < 3; i++) { printf( " %c | %c | %c \n", arr [i][0], arr[i][1], arr原创 2016-05-12 23:17:15 · 5005 阅读 · 3 评论 -
通讯录-第一版番外篇
#define _CRT_SECURE_NO_WARNINGS 1#ifndef __ADDRESSBOOK_H__ //使用条件编译,防止重复引入头文件#define __ADDRESSBOOK_H__#define NAME_MAX 20#define SEX_MAX 6#define TELE_MAX 20#define ADDR_MAX 40原创 2016-05-12 00:21:15 · 3346 阅读 · 0 评论 -
通讯录--第二版番外篇
#define _CRT_SECURE_NO_WARNINGS 1#ifndef __ADDRESSBOOK_H__ //使用条件编译,防止重复引入头文件#define __ADDRESSBOOK_H__#define NAME_MAX 20#define SEX_MAX 6#define TELE_MAX 20#define ADDR_MAX 40原创 2016-05-12 00:20:07 · 3213 阅读 · 0 评论 -
表达式求值
中缀表达式: 把运算符放在参与运算的两个操作数中间的表达式称作中缀表达式例:“3+4*5-6/2”,因为中缀表达式计算时必须按照优先级从左向右计算,所以计算机在进行中缀表达式求值时比较麻烦,而后缀表达式求值比较方便。后缀表达式: 把运算符放在参与运算的两个操作数后面的表达式称作后缀表达式。例:中缀表达式:3+4*5-原创 2016-05-13 00:23:29 · 2530 阅读 · 0 评论 -
计算器
#ifndef _CALCULATOR_H__#define _CALCULATOR_H__#define _CRT_SECURE_NO_WARNINGS 1#include#include#include#define MAX 100typedef char ElemType;#define STACK_INIT_MEMORY 100#define STACK_GROW_ME原创 2016-05-27 13:48:28 · 1282 阅读 · 0 评论 -
通讯录-第三版
第一版中: 我们开辟了一个有1000个元素的结构体数组来保存通讯录的信息,这种方式有一个缺点,当通讯录中存储的联系人比较少时会造成内存资源的浪费。第二版中: 我们采用动态内存的方式去开辟数组,并且根据联系人个数的增加,而不断的增长这块存储空间,这样就避免了内存浪费的现象。但是这个版本还是有一些问题,就是当程序运行起来保存的信息到程序结束就被销毁,下一原创 2016-05-17 00:07:57 · 6427 阅读 · 0 评论 -
计算器2
#define _CRT_SECURE_NO_WARNINGS 1#include#include#include#include#define STACK_INIT_MEMORY 10#define ADD_MEMORY 10#define SIZE 100;typedef char ElemType;typedef struct stack{ Elem原创 2016-07-12 10:26:38 · 1416 阅读 · 0 评论 -
万年历
实现万年历,日期加天数,日期减天数,日期减日期,打印日历。#include#includeusing namespace std;class Date{public: Date(int year = 1901, int month = 1, int day = 1,int week=2) :_year(year)原创 2016-08-18 13:38:49 · 1664 阅读 · 0 评论 -
日期计算器
实现日期加减天数,得到一个日期;日期减日期,得到一个天数。#include#include#includeusing namespace std;//添加打印指定月的信息,一个月的每一天和对应enum{ zero, one, tow, three};class Date{public: Date(int year = 2016, int month = 7,原创 2016-08-14 09:21:37 · 1226 阅读 · 0 评论 -
ftp服务器实现
在模拟实现FTP服务器之前,我们先来了解一下有关FTP的功能以及工作原理。一、什么是FTP ftp(File Transfer Protocol)文件传输协议。ftp是应用层协议,基于C/S结构,底层使用TCP/IP协议来保证可靠性。 ftp使得主机间可以共享文件,简单来说就是可以在两台计算机之间来回拷贝文件。 ftp服务的基本过程就是:建立连接、传输数据与释放连接。由原创 2017-06-09 22:59:36 · 10536 阅读 · 4 评论