关闭

集合的位图表示(C语言描述)

标签: 集合的位图表示C语言描述集合位图
943人阅读 评论(0) 收藏 举报
分类:

用位图表示集合的主要思路如下,

比如说有一个小于16的非负整数的集合,例如:{1,8,9,3,15}

可以在一个大于16bit的数据类型表示这个集合。第0bit位表示集合的数字0,第1bit位表示数字1,第nbit位表示集合数字n。

若是对应的bit位被置位为1,则表示该集合存在对应的数值元素。

假设机器上short为16位,在初始化后,各bit位如下所示:

0000 0000 0000 0000

在根据集合元素设置相应的bit位之后,个bit位如下所示:

0100 0000 1100 0001


该算法可以用于统计集合中出现的元素,以及可以对没有重复数据进行排序


其算法C实现如下(已验证)

在终端上输入数据,当有输入数字大于10000的时候,便会停止统计,从小到大输出结果。

#include<stdio.h>


#define RANGE 10000 //集合最大值与最小值之间的范围
#define DATA_WIDTH   (sizeof(int)*8)

int main(int argc,char *argv[])
{
        unsigned int bitmap[RANGE/DATA_WIDTH + 1] ;
        unsigned int  num = 0;
        int i,j;
        for(i = 0;i < (RANGE/DATA_WIDTH + 1);i++ ) //初始化
        {
                bitmap[i] = 0;
        }
        //printf("%d\n",RANGE/DATA_WIDTH + 1);
        while(scanf("%d",&num),num < 10000) //等待输入的数据
        {
                bitmap[num/DATA_WIDTH] |= 1 << (num%DATA_WIDTH);   //根据数据将相对应的bit位位置位为1             
        }
        for(i = 0; i < (RANGE/DATA_WIDTH + 1);i++ )   //将统计按结果顺序输出
        {
                  if(bitmap[i] != 0)
                {
                        for(j = 0 ; j < DATA_WIDTH; j++)
                        {
                                if((bitmap[i]&(1 << j)))
                                {
                                        printf("%d \n",i*DATA_WIDTH+j);
                                }
                        }
                }
        }

        return 0;
}

0
0
查看评论

C语言实现集合的交,并,差

C语言实现集合的交,并,差作者:Raining_C      来源:http://blog.csdn.net/Raining_CN     【问题描述】     ...
  • jixingzhong
  • jixingzhong
  • 2006-12-28 10:07
  • 11533

C语言中求集合的交并差集

  • 2015-09-27 08:57
  • 42KB
  • 下载

集合的位图表示(C语言描述)

用位图表示集合的主要思路如下, 比如说有一个小于16的非负整数的集合,例如:{1,8,9,3,15} 可以在一个大于16bit的数据类型表示这个集合。第0bit位表示集合的数字0,第1bit位表示数字1,第nbit位表示集合数字n。 若是对应的bit位被置位为1,则表示该集合存在对应的数值元素...
  • mcu_tian
  • mcu_tian
  • 2015-07-10 20:36
  • 943

C语言读取位图

位图文件是分成4部分的。第一部分是位图文件头,它包括位图文件名,位图的大小和位图数据离文件头的偏移量。接下去的是位图信息头,它包括了位图的许多信息,比如位图的宽度,高度和位图使用的颜色数。再后面是颜色表,它可能包含了2个或更多的RGBQUAD结构。最后面是位图图象的数据。 一.位图结构如下...
  • redline2005
  • redline2005
  • 2013-11-29 14:52
  • 2710

递增有序的顺序表表示集合,求解两个集合的交集 并集 差集(c语言实现)

#include #include #define max 100 typedef struct {     int elem[max];     int length; }List; void UnionList(); void In...
  • qq_33609401
  • qq_33609401
  • 2016-09-26 20:02
  • 2382

c语言题目集合

转自:http://blog.csdn.NET/oqqhutu12345678/article/details/69524383 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * ...
  • zcxht
  • zcxht
  • 2017-05-11 23:59
  • 436

C语言程序源代码(大集合).rar

  • 2010-10-30 19:06
  • 1.73MB
  • 下载

数据结构:栈的链式实现(C语言描述)

栈本质上是一个线性表,只不过对线性表的操作进行了限制,只可以在表的一端进行操作(插入、删除元素)。栈是一种是一种实现数据“先进后出”的存储结构,分为静态栈和动态栈,静态栈就是以数组的方式存储数据,动态栈是以链表的方式存储数据;对栈的操作算法,常用的就是压栈和出;下面将以链式的方式创建栈,并对用c语言...
  • lpp0900320123
  • lpp0900320123
  • 2014-03-06 16:37
  • 6459

位图算法 C语言

位图算法 C语言
  • moxiaopeng
  • moxiaopeng
  • 2014-08-06 00:17
  • 2173

C语言实现排列组合

c语言实现排列组合算法问题 排列组合是算法常用的基本工具,如何在c语言中实现排列组合呢?思路如下: 首先看递归实现,由于递归将问题逐级分解,因此相对比较容易理解,但是需要消耗大量的栈空间,如果线程栈空间不够,那么就运行不下去了,而且函数调用开销也比较大。 (1) 全...
  • wangshengfeng1986211
  • wangshengfeng1986211
  • 2014-08-04 11:02
  • 20048
    个人资料
    • 访问:78566次
    • 积分:1282
    • 等级:
    • 排名:千里之外
    • 原创:49篇
    • 转载:4篇
    • 译文:0篇
    • 评论:1条
    文章分类