在这种情况下我应该使用什么样的数据结构?

时间:2012-11-01 18:29:13

标签: c data-structures

我有一个函数,它在循环内部调用,它可以为每个循环生成一组整数,例如:

循环1的结果:{1 1 1 2}
循环2的结果:{1 1 1 3}
循环3的结果:{2 1 1 3}
循环4的结果:{3 1 3 2}

并且该函数可以生成重复结果,例如,结果2和结果3是相同的。我需要把这些结果放在一个数据结构中,但是不能把重复,如果结果2与结果3相同,只保留其中一个,如何在C中实现它?

2 个答案:

答案 0 :(得分:1)

如果项目范围足够小,您可以使用位图作为枚举的平均值。例如。如果要表示1到32范围内的整数集,则只需要一个用作位图的32位整数:

00000001 00000001 00000000 00000000    - for set {8,16}
       ^        ^
       8        16

如果范围较大,请使用字节数组,其中每个位表示此位置的值是否存在于集合中:

#define MAXVAL 1024

typedef unsigned char bitmap_t[];
byte bitmap[1 + MAXVAL / CHAR_BIT] = { 0 };
// CHAR_BIT is defined in limit.h and is equal to count of bits in a byte

void insert(bitmap_t bitmap, unsigned val) {
  assert(val < MAXVAL);
  bitmap[val / CHAR_BIT] |= (1 << (val % CHAR_BIT);
}

int is_present(bitmap_t bitmap, unsigned val) {
  assert(val < MAXVAL);
  return bitmap[ val / CHAR_BIT ] & (1 << (val % CHAR_BIT));
}

答案 1 :(得分:0)

在C ++中,这很容易。只需使用std::set std::tuple。在C中,您必须自己实现所有功能或找到一个好的库,但整体方法是相同的。