IntSetBitVecC.c C语言版本,觉得用C模仿C++的类,好辛苦。。。
来源:互联网 发布:银行软件开发笔试题库 编辑:程序博客网 时间:2024/05/11 19:11
//E:\myprj\mylib\IntSetBitVecC.c
#include <stdlib.h>#include <memory.h>enum { BITSPERWORD = 32, SHIFT = 5, MASK = 0x1F };struct IntSetBitVecC{//public:int (*init)(struct IntSetBitVecC * bitSet, int maxelements, int maxval);void (*destroy)(struct IntSetBitVecC ** bitSet);int (*size)(struct IntSetBitVecC * bitSet);void (*insert)(struct IntSetBitVecC * bitSet, int t);void (*report)(struct IntSetBitVecC * bitSet, int * v);//private:int n, hi, *x;void (*set)(struct IntSetBitVecC * bitSet, int i);void (*clr)(struct IntSetBitVecC * bitSet, int i);int (*test)(struct IntSetBitVecC * bitSet, int i);};static void set(struct IntSetBitVecC * bitSet, int i){bitSet->x[i>>SHIFT] |= (1 << (i & MASK));}static void clr(struct IntSetBitVecC * bitSet, int i){bitSet->x[i>>SHIFT] &= ~(1 << (i & MASK));}static int test(struct IntSetBitVecC * bitSet, int i){return bitSet->x[i>>SHIFT] & (1 << (i & MASK));}static int init(struct IntSetBitVecC * bitSet, int maxelements, int maxval){int i;int ret = 0;if (bitSet) {bitSet->hi = maxval;bitSet->x = (int *)malloc((1 + bitSet->hi/BITSPERWORD) * sizeof(int));if (bitSet->x) {for (i = 0; i < bitSet->hi; i++) {bitSet->clr(bitSet, i);}bitSet->n = 0;ret = 1;//成功}}return ret;}static void destroy(struct IntSetBitVecC ** bitSet){if (bitSet) {if (*bitSet) {if ((*bitSet)->x)free((*bitSet)->x);free(*bitSet);*bitSet = NULL;}}}static int size(struct IntSetBitVecC * bitSet){if (bitSet) {return bitSet->n;}return 0;}static void insert(struct IntSetBitVecC * bitSet, int t){if (bitSet) {if (bitSet->test(bitSet, t))return;bitSet->set(bitSet, t);bitSet->n++;}}static void report(struct IntSetBitVecC * bitSet, int * v){if (bitSet) {int i, j = 0;for (i = 0; i < bitSet->hi; i++) {if (bitSet->test(bitSet, i))v[j++] = i;}}}struct IntSetBitVecC * createIntSetBitVecC(void) {struct IntSetBitVecC * b = NULL;b = (struct IntSetBitVecC *)malloc(sizeof(struct IntSetBitVecC));if (b) {memset(b, 0, sizeof(struct IntSetBitVecC));b->init = init;b->destroy = destroy;b->size = size;b->insert = insert;b->report = report;b->set = set;b->clr = clr;b->test = test;}return b;}////////////////////////////////////////////////////////////////////////////测试#include <stdio.h>#include <time.h>static void gensets(int m, int maxval){int * v = NULL;int i;struct IntSetBitVecC * s = createIntSetBitVecC();v = (int *)malloc(m * sizeof(int));if (NULL == v)return;if (s) {srand((int)time(NULL));if (s->init(s, m, maxval)) {while(s->size(s) < m){s->insert(s, rand()%maxval);}s->report(s, v);for (i = 0; i < m; i++){printf("%d, ", v[i]);}printf("\n");}s->destroy(&s);}}void testSetBitVecC(void){gensets(10, 100);}
- IntSetBitVecC.c C语言版本,觉得用C模仿C++的类,好辛苦。。。
- 辛苦的学习C++/VC
- 用C语言模仿Python函数
- C语言 HexToBin BinToHex 模仿
- C语言模仿C++多态
- C 语言模仿实现HashTable
- C语言模仿C#事件
- C语言的标准版本
- C语言的各种版本
- C语言的标准版本
- 模仿go语言的C语言面向对象范式
- 我觉得C语言是根本
- 一些关于C语言文件的帖子,觉得不错
- C语言版本
- C语言版本历史
- 用PHP调用C扩展整个配置过程(好辛苦呀)
- c语言,模仿js中split方法的函数
- 写好C语言的头文件
- android控件17 TextSwitcher
- Cookies
- 随机生成01矩阵
- Android成长之路-Android组件——ProgressBar例子小解
- 程序员眼中的女人
- IntSetBitVecC.c C语言版本,觉得用C模仿C++的类,好辛苦。。。
- Win7中创建快捷工具栏
- Sql2005常用函数大全 及 事务
- Android Socket编程初探
- ioctl write
- 电商术语
- 有关wondows phone7工具栏添加图片的问题
- 水晶报表
- Android成长之路-Android组件——TabHost例子小解