Purtroppo, non credo sia giusto fornirti la soluzione del tuo compito. Però, sono dell'idea che una scintilla può accendere un grande fuoco 
Quindi, io ti consiglio di procedere così:
1) quando programmi indenta, indenta, indenta;
2) se una funzione crea qualcosa le domande le fai nel main e non nella funzione
3) se devi creare una matrice quadrata o rettangolare che sia ti serve un doppio loop:
codice:
#include <stdlib.h>
#include <stdio.h>
struct elemento{
struct elemento *prev;
struct elemento *su;
int inf;
struct elemento *next;
struct elemento *giu;};
struct elemento* crea_scacchiera(int N){
struct elemento* p, precedente,successivo,sotto,sopra;
int i,j;
if(N==0) p = NULL;
else {
for (i=0;i<N;i++){
for (j=0;j<N;j++){
p = (struct elemento*)malloc(sizeof(struct elemento));
if (i==0) p->prev = NULL;
if (j==0) p->su = NULL;
// adesso continua tu. Altrimenti non ti eserciti :)
}
}
} // chiudo l'if-else
return p;
}
int main(){
int n;
struct elemento* inizio;
printf("\n Specificare la dimensione della scacchiera: ");
scanf("%d", &n);
inizio = crea_scacchiera(n);
return 0;
}
Fai un'altro tentativo e se ti blocchi provo a darti dell'altro fuoco. CIao