這是我的代碼。我對c和指針很陌生,所以很可能是指針錯誤。算法檢查泛型類型的數組是否是MaxHeap
#include<stdio.h>
#include <stdbool.h>
typedef int (*comparatorPtr)(void*, void*);
bool isMaxHeap(void **heap, int index, int length, comparatorPtr comparator);
/**
* comparator with pointers (the mistake could be here)
*/
int comparator_integer(void* e1, void* e2) {
int i1 = *(int *) e1;
int i2 = *(int *) e2;
//print 2 elements of array/heap
printf("I1 heap: %d\n", i1);
printf("I2 heap: %d\n", i2);
printf("***************************\n");
if (i1 == i2) return 0;
else if (i1 > i2) return 1;
else return -1;
}
/**
* Function for check if the array is or isn't a maxHeap
*/
bool isMaxHeap(void **heap, int index, int length, comparatorPtr comparator) {
if (index > length - 1) return true;
printf("I'm calling comparator 1 \n%d value index1\n",index);
if (length > index * 2 && comparator((heap + index), (heap + (index * 2))) < 0) return false;
printf("I'm calling comparator 2 \n%d value index2\n",index);
printf("Value lenght %d\n", length);
if (length > index * 2 + 1 && comparator((heap + index), (heap + ((index * 2) + 1))) < 0) return false;
printf("I'm calling comparator 3 \n");
if (index == 0) return isMaxHeap(heap, 1, length, comparator) && isMaxHeap(heap, 2, length, comparator);
else return isMaxHeap(heap, index * 2, length, comparator) && isMaxHeap(heap, index * 2 + 1, length, comparator);
}
int main() {
int array[6] = {90, 15, 10, 7, 12, 2}; //maxHeap array
int length = sizeof(array)/ sizeof(array[0]);
int index = 0;
printf("element in position 1: %d\n",*(array + (index*2)+1));
printf("length %d\n", length);
isMaxHeap((void **) &array, index, length, &comparator_integer) ? printf("Yes"): printf("No");
return 0;
}
陣列是一個MaxHeap,但我不知道爲什麼我的代碼返回 號(printf的在這裏只是爲了嘗試捕捉錯誤)
感謝
'void **'用於指針數組,而不是數組元素。 – Barmar
'isMaxHeap'需要知道數組每個元素的大小,然後將指針轉換爲'char *',並添加乘以大小的索引。 – Barmar