希望我的问题是可读的..
所以我正在做的是将具有唯一dataIndex的项插入到数组中,但在插入之前,我需要检查dataIndex是否已被使用。
这是我使用的两种结构:
typedef struct item {
float key; // the key for deciding position in heap
unsigned int dataIndex; // a unique id for each item
} HeapItem;
typedef struct heap {
HeapItem *H; // the underlying array
unsigned int *map; //map[i] is the location of item with dataIndex==i
unsigned int n; // the number of items currently in the heap
unsigned int size; // the maximum number of items allowed in the heap
} Heap;
我检查dataIndex所做的是:
for (unsigned int i = 0; i < h->n; i++) {
if (h->H[i].dataIndex == dataIndex) {
return HEAP_FAIL;
}
}
但每次插入内容时,这个for循环将花费O(n)次,所以我想做的是:
if (h->map[dataIndex] != NULL ) {
return HEAP_FAIL;
}
但这段代码不起作用。
所以我的问题是如何检查h->H[h->map[dataIndex]]
是否为空?
以下是我分配H和map的方式:
h->H = (HeapItem *)malloc(sizeof(HeapItem));
h->map = (unsigned int *)malloc(sizeof(unsigned int));
答案 0 :(得分:0)
new QTTestClass()
它不起作用,因为if (h->map[dataIndex] != NULL ) {
return HEAP_FAIL;
}
包含值而非地址,h->map[dataIndex]
以上将检查值if
。即使您没有初始化,任何位置都会有一些垃圾值。
所以,最好的方法是初始化一些值,比如-1,无穷大,或者你认为不会出现在实际值范围内的任何值。