ho scritto un sorgente che simula la situazione
#include <stdio.h>
#include <malloc.h>
typedef struct prova{
int i;
struct prova *succ;
struct prova *prec;
} prova;
prova *qa, *q;
void inserisci(prova **tp, prova *t_tpr);
int main(){
qa=NULL;
q=(prova *)malloc(sizeof(prova));
inserisci(&qa, q);
inserisci(&qa, q);
return(0);
}
void inserisci(prova **tp, prova *t_tpr){
if(**tp==NULL) //se la coda è vuota
*tp=t_tpr; /* il puntatore puntato da pt punta (cioè quello che punta al fondo) all' elemento appena aggiunto */
else{
//la coda non è vuota
// devo sistemare succ e prec dell' elemento appena aggiunto
// la coda è circolare
t_tpr->succ=*tp->succ; // next dell' ultimo aggiunto è uguale a next dell' vecchio fondo cioè il primo essendo circolare
t_tpr->prec=*tp // il precedente è il vecchio fondo
*tp->succ->prec=t_tpr; // sistemo il prec del primo mettendogli quello apena aggiunto
*tp->succ=t_tpr;
}
}
dalla compilazione risulta
prova.c: In function ‘inserisci’:
prova.c:28: error: invalid operands to binary == (have ‘prova’ and ‘void *’)
prova.c:35: error: request for member ‘succ’ in something not a structure or union
prova.c:39: error: request for member ‘succ’ in something not a structure or union
prova.c:40: error: request for member ‘succ’ in something not a structure or union
che sono
//righa 28 if(**tp==NULL) //se la coda è vuota
*tp=t_tpr; /* il puntatore puntato da pt punta (cioè quello che punta al fondo) all' elemento appena aggiunto */
else{
//la coda non è vuota
// devo sistemare succ e prec dell' elemento appena aggiunto
// la coda è circolare
t_tpr->succ=*tp->succ; // next dell' ultimo aggiunto è uguale a next dell' vecchio fondo cioè il primo essendo circolare
t_tpr->prec=*tp // il precedente è il vecchio fondo
*tp->succ->prec=t_tpr; // sistemo il prec del primo mettendogli quello apena aggiunto
*tp->succ=t_tpr;
}