74 lines
1.3 KiB
C
74 lines
1.3 KiB
C
// Laboratorio 7 - Esercizio 2 - Diagonali.c
|
|
// Matteo Schiff - s295565
|
|
|
|
#include <stdlib.h>
|
|
#include "Elementi.h"
|
|
#include "Diagonali.h"
|
|
|
|
typedef struct node_s *link;
|
|
|
|
typedef struct node_s {
|
|
Diagonale diag;
|
|
link next;
|
|
} node;
|
|
|
|
typedef struct diagonali
|
|
{
|
|
link head;
|
|
int N;
|
|
} *Diagonali;
|
|
|
|
link new_node(Diagonale diag, link next) {
|
|
link t = malloc(sizeof(node));
|
|
if (t == NULL) {
|
|
printf("Errore: impossibile allocare memoria");
|
|
exit(2);
|
|
}
|
|
t->diag = diag;
|
|
t->next = next;
|
|
|
|
return t;
|
|
}
|
|
|
|
void free_node(link p) {
|
|
free(p);
|
|
}
|
|
|
|
/* creatore e distruttore */
|
|
Diagonali DiagionaliInit() {
|
|
Diagonali new = malloc(sizeof(struct diagonali));
|
|
new->head = NULL;
|
|
new->N = 0;
|
|
return new;
|
|
}
|
|
|
|
void DiagonaliFree(Diagonali diags) {
|
|
link p, x;
|
|
for (p = diags->head, x = diags->head->next; x != NULL; p = x, x = x->next){
|
|
free_node(p);
|
|
}
|
|
free(diags);
|
|
}
|
|
|
|
void DiagonaliInsert(Diagonali diags, Diagonale newDiag) {
|
|
link nd = new_node(newDiag, diags->head);
|
|
diags->head = nd;
|
|
diags->N++;
|
|
}
|
|
|
|
link DiagonaliTraverse(Diagonali diags, link prev, Diagonale ** elem) {
|
|
link next;
|
|
|
|
if (prev == NULL) {
|
|
next = diags->head;
|
|
} else {
|
|
next = prev->next;
|
|
}
|
|
|
|
if (next == NULL)
|
|
return NULL;
|
|
|
|
*elem = &next->diag;
|
|
return next;
|
|
}
|