通用红黑树(Tree-Map)容器纯C实现
纯C实现的通用红黑树容器不好找,于是自己琢磨着实现了一个。
算法部分直接剪裁自Linux内核中的rbtree
作者主要是在此基础上封装了一个通用的容器
里面含有 test例子 以及 benchmark基准测试
另外这个是Windows和Linux都可以用的
由于Linux内核的rbtree用了很多C99语法,笔者还得写了一些宏改造内核代码
Linux下的make是完整的
Windows下提供了VS08版的sln文件(只有test木有benchmark)
附带了一个C++里面的STL Map的benchmark
nodejs写的HTTP静态文件的引擎(轻量级)
采用nodejs写的,纯javascript代码,无任何依赖(仅使用了nodejs的标准库)
轻量级,代码只有15K,带注释
支持各种配置(内嵌到代码最上面的部分,详细注释)
支持目录访问(自动列出全部子目录和文件,可关闭)
支持欢迎页(index.html,存在该文件就不会列出目录了)
支持小文件内存缓存(LRU算法,可配置尺寸)
支持304木有修改(静态服务器最重要的就是这个了吧)
支持gzip、deflate压缩
支持分段下载(支持部分,可用迅雷等多线程下载工具)
提供动态解析的接口
最后由于是本人练习所用写的,对HTTP协议的支持还是很不完善的,但是稳定性还是可以的,现在该程序运用在Minecraft多人服务器-蓝色星球上,稳定地使用了3个月了吧……
BrainFuck编程语言
Brainfuck,是一种极小化的计算机语言,它是由Urban Müller在1993年创建的。由于fuck在英语中是脏话,这种语言有时被称为brainf*ck或brainf***,甚至被简称为BF。
【内含:BF解释器,BF解释器源码,BF写的几个小程序】
ReadMe:
Brainfuck 编程语言
[图灵完全]
[8条指令]
语法:
> 指针加一
< 指针减一
+ 指针指向的字节的值加一
- 指针指向的字节的值减一
. 输出指针指向的单元内容(ASCII码)
, 输入内容到指针指向的单元(ASCII码)
[ 如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处
] 如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处
特性:
8KB 环状内存(初始化为0)
<>操作不会越界
加减操作环状
+-操作不会溢出(0xFF + 为 0x00)
文件说明:
bf.exe 解释器
Usage: bf [-options] source
where options include:
-b buffered input (default mode) 缓冲输入(按回车才输入,默认)
-i not buffered input 无缓冲输入
-e not buffered input without echo 无缓冲输入且不回显
bf.cpp 解释器的源代码(纯C实现)
hello.txt HelloWorld程序
up.txt 这个程序将你的输入(小写字母)转换为大写(回车结束)
add.txt 这个程序对两个一位数做加法,并输出结果(如果结果也只有一位数的话)(例如:输入2+3)
mul.txt 这个程序对两个一位数做乘法,并输出结果(如果结果也只有一位数的话)(例如:输入2*3)
factor.txt 这个程序分解多位数的因子,并输出结果(例如:输入1000)
numwarp.txt 这个程序输入 ()-./0123456789abcdef 和空格的字符串,显示很有趣的排列结果(例如:输入520 1314)
prime.txt 这个程序输入一个多位整数,输出从1到这个整数间的所有素数(例如:输入100)
quine.txt 这个程序输出源代码本身
[以上程序,基本上依靠回车确认]
C-Minus词法语法分析器(JavaScript实现)
这是《编译原理》的课程设计--C-Minus词法语法分析器(带有课程设计报告),采用Web前端的JavaScript实现,兼容多种浏览器。词法分析器部分采用表驱动机制实现,同时提供一套用于快速验证性的正则匹配测试工具。语法分析器采用LR(0)文法实现,并且提供自动化构造LR(0)的操作表生成器。(源代码的注释非常详细,请先看下里面的"说明.txt")(温馨提示:下载后评论【需要评选等级】会返回被扣除的积分)
离散数学二元关系类(Java实现)
* 二元关系类及其测试
* 某一集合上的二元关系类
* 提供关系的性质判断 关系间的运算 求关系的闭包
* 判断自反性
* 判断反自反性
* 判断对称性性
* 判断反对称性
* 判断传递性
* 关系和合成运算
* 关系自身与某一关系的运算
* 两个关系之间的运算
* 求一关系的自反闭包
* 求一个关系的对称闭包
* 求一个关系的传递闭包
AND//关系的交运算
OR//关系的并运算
NOT//关系的非运算
XOR//关系的异或运算
SUB//关系的减运算
简单测试如下:
请输入关系矩阵的阶数
3
请输入第一个关系矩阵的各个元素值
1 0 1
1 1 1
1 0 1
请输入第二个关系矩阵的各个元素值
0 0 0
1 1 1
0 0 0
r的自反闭包是
1 0 1
1 1 1
1 0 1
r的对称闭包是
1 1 1
1 1 1
1 1 1
r的传递闭包是
1 0 1
1 1 1
1 0 1
r2是反对称的?
false
r和r2的并关系是
1 0 1
1 1 1
1 0 1
离散数学求合适公式的真值表(Java 实现)
* 显示合适公式的真值表
* 提供将一个中缀合适公式的真值表输出到某一PrintStream流中的功能
* 以单个大写字母表示变量(支持26个变量)
* 以字符0或者1表示值
* 以 ~ ^ & > - 分别表示 非 析取 合取 条件 双条件 连接词
* 支持 ( )(括号)
* 如果公式中有错误将不会输入真值表(将会输出错误信息)
说明:以 ~ ^ & > - 分别表示 非 析取 合取 条件 双条件 连接词
以单个大写字母表示变量(支持26个变量)
以字符0或者1表示值,式子中的T与F
支持 ( )(括号)
如果公式中有错误将不会输入真值表(将会输出错误信息)
注意:输出的结果会同时显示到屏幕与该程序的同目录下的“真值表结果.txt”文件中
直接按回车键(输入为空)则会退出程序
例如:输入 A^B-(1&C)则会显示
该合适公式是 A^B-(1&C)
A B C Key
0 0 0 0
1 0 0 0
0 1 0 0
1 1 0 1
0 0 1 0
1 0 1 0
0 1 1 0
1 1 1 1
C++智能指针实现(不用再担心你的内存泄露)
代码量,2.5KB,指针共享操作,自动在最后一个智能指针销毁时delete,不再产生内存泄露。内含简单使用范例。不支持管理数组。设有Debug版本的断言,确保智能空指针不被使用。
/*
智能指针类
不能用于数组,指针指向的数据必须是new出来的
不能创造该类的指针
不能将任意实体指针分别赋值给两个不同的智能指针(通过构造函数或者=)
*/
表达式计算(C++ STL 实现)
通过逆波兰式来计算数学中的中缀表达式,例如:3+(4-7*5),主要是处理运算优先级问题。源码里面的注释非常详细,由于基于基本数据类型实现,实用价值较小,用作学习还是很不错的。(支持的符号(半角模式):0123456789 ( ) .(小数点) + - * / !(阶乘) ^(次方))
.ini文件解析器(C++ 标准库实现)
纯C++标准库实现,仅用到了,这些标准库,没有在Linux下测试过。(简易实现,代码部分仅6K,全采用string类型)
/*
.ini 文件 解析器【只能读取】
Section和Key只能为字母、数字、下划线、空格、减号、点(且首字符只能为字母数字或下划线,自动忽略前导后导空格)
Value不能为制表符、换行、分号等(自动忽略前导后导空格,值可以为空)
整行不能超过4096字节
某个标识符不能超过2048字节
*/
文件为源代码和Dev-C编译的exe以及3个用于测试的 .ini文件(error.ini是故意错的,由于查不到ini的标准,以解析php.ini为准了)
采用一次性全部加载文件的形式(文件太大估计不行)
简易计算器(Java Swing实现)
/**
* Java计算器
* chishaxie
* 支持中缀表达式运算(可以算一个很长的数学表达式)
* 支持高精度浮点数运算
* 支持按钮和键盘同步监听
* 支持错误处理并提示
*/
可以试试算65535的阶乘啰(等待1分钟左右)
简单Web服务器(Java实现)
这是《计算机网络》的课程设计--多线程的Web服务器(带有课程设计报告),里面为Eclipse3.5的工程。支持HTTP1.1(但是不完善),支持多线程(采用的线程池),支持简单CGI(仅PHP的CGI模块通过测试),支持配置文件和简单的日志记录。要支持PHP的动态脚本的话,需要自行下载PHP的文件到php目录下,并且更改设置,开启PHP的CGI模式。(请先看下里面的"说明.txt")(温馨提示:下载后评论【需要评选等级】会返回被扣除的积分)
线程池(Java实现,简易)
可以直接使用的
任意类实现Runnable接口,则可使用
先构造ThreadPool对象,然后调用其execute方法,将自己的线程作为参数传入即可(注意,不能让你的线程开启)
支持最小线程数
支持最大线程数(线程增加后不会减少)
支持线程增长阀值
支持简单日志记录
C++的线程读写锁(windows实现)
/**
* 读写锁
* 读-读并发,读-写互斥,写-写互斥
* Windows NT下可以使用
* 基于CRITICAL_SECTION实现,简单高效,只支持在进程内使用,不支持进程间使用
* 支持限制最大并发读者数
* 写操作优先(即当前有线程在读,有写操作后,不允许再有新的读,直至写操作完成,避免写操作饿死)
* 直接加写锁才是写优先状态,采用尝试写是非写优先的
* @version 1.1
*/
附带有使用的例子……
读写锁(windows版,基于临界区实现,高效,简单)
读写锁(读-读并发,读-写互斥,写-写互斥,基于CRITICAL_SECTION实现,简单高效,不支持进程间使用,写操作优先(即当前有线程在读,有写操作后,不允许再有新的读,直至写操作完成,避免写饿死))
Java写的排序类(快速排序 堆排序 计数排序 桶排序 归并排序)
//排序类 提供int排序的静态方法
有以下排序:
快速排序
堆排序
计数排序
桶排序
归并排序