J'essaye d'implémenter un tas de décalage en C, mais mon code ne compile pas. Je ne suis pas très expérimenté en C et je n'ai jamais créé de tas en C. C'est pourquoi je ne sais pas comment le réparer, j'espère que quelqu'un pourra me diriger dans la bonne direction. J'ai lu des articles sur le tas de biais et c'est ce que j'ai obtenu jusqu'à présent en utilisant les algorithmes que j'ai trouvés en ligne. Merci d'avance.Implémentation en C du tas de désalignement
typedef struct node
{
int value;
struct node * root;
struct node * leftchild;
struct node * rightchild;
} Node;
struct skewHeap
{
struct node * root;
};
void skewHeapInit (struct skewHeap * sk)
{
sk->root = 0;
}
void skewHeapAdd (struct skewHeap *sk)
{
struct node *n = (struct node *) malloc(sizeof(struct node));
assert(n != 0);
n->value = 0;
n->leftchild = 0;
n->rightchild = 0;
line 185. s->root = skewHeapMerge(s->root, n);
}
void skewHeapRemoveFirst (struct skewHeap *sk)
{
struct node * n = sk->root;
free(n);
sk->root = skewHeapMerge(n->leftchild, n->rightchild);
}
line 196. struct node * skewHeapMerge(struct node *left, struct node *right)
{
struct node *temp = (struct node *) malloc(sizeof(struct node));
if (left == NULL)
return *right;
if (right == NULL)
return *left;
if (left->value < right-> value)
{
temp = left->leftchild;
left->leftchild = skewHeapMerge(left->rightchild, right);
left->rightchild = temp;
return left;
}
else
{
temp = right->rightchild;
right->rightchild = skewHeapMerge(right->leftchild, left);
right->leftchild = temp;
return right;
}
}
Ce sont les erreurs de compilations que je reçois en ce moment:
program.c: In function ‘skewHeapAdd’:
program.c:185: warning: implicit declaration of function ‘skewHeapMerge’
program.c:185: warning: assignment makes pointer from integer without a cast
program.c: In function ‘skewHeapRemoveFirst’:
program.c:191: warning: assignment makes pointer from integer without a cast
program.c: At top level:
program.c:196: error: conflicting types for ‘skewHeapMerge’
program.c:185: note: previous implicit declaration of ‘skewHeapMerge’ was here
program.c: In function ‘skewHeapMerge’:
program.c:202: error: incompatible types when returning type ‘struct node’ but ‘struct node *’ was expected
program.c:205: error: incompatible types when returning type ‘struct node’ but ‘struct node *’ was expected
Quelle est l'erreur de compilation? –
On dirait que vous avez écrit un programme complet, puis compilé et vous êtes débordé. Essayez de prendre l'habitude d'écrire un peu de code et de le compiler. Combinez cela avec la lecture des messages d'erreur du compilateur. Vous devriez toujours commencer par le * premier * message d'erreur, car il peut causer d'autres messages d'erreur qui prêtent à confusion. – paddy
c'est un peu un gâchis! vous allez purger la mémoire dans votre fusion, votre mémoire n'a pas besoin de mémoire, vous l'utilisez simplement pour pointer vers la mémoire existante. Vous n'avez pas montré la définition de "node" –