a simple bit vector
#include <stdio.h>#define BYTE_LEN 8unsigned int direct_address_search(int T[], int k) {int byte_offset = k / BYTE_LEN;int bit_offset = k % BYTE_LEN;return (T >> bit_offset) & 1u;}void direct_address_insert(int T[], int k) {int byte_offset = k / BYTE_LEN;int bit_offset = k % BYTE_LEN;T |= (1u << bit_offset);}void direct_address_delete(int T[], int x) {int byte_offset = x / BYTE_LEN;int bit_offset = x % BYTE_LEN;T &= (0u << bit_offset);}void info(unsigned int T[], int size) {int i;for (i = 0; i < size; i++) { printf("%d: %#X\n", i, T); }}int main(int argc, const char *argv[]) {/* A 16 bit bit-vector */unsigned int T = {0};direct_address_insert(T, 0);direct_address_insert(T, 2);printf("bit 1 is %d\n", direct_address_search(T, 1));printf("bit 2 is %d\n", direct_address_search(T, 2));info(T, 2);direct_address_delete(T, 0);direct_address_delete(T, 2);return 0;}
页:
[1]