PDA

Visualizza la versione completa : [C] Liste: aggiungere elemento in una posizione data


ggd94
05-09-2014, 22:14
Salve a tutti .. sto continuando con i miei esercizi in C ma trovo molte difficoltà con le liste.Sto svolgendo un esercizio che mi chide di aggiungere un elemento nella posizione data n,ma non riesco a capire per quale motivo creando la funzione che riporterò di seguito la lista che mi stampa è quella iniziale ,o meglio,non mi inserisce nessun elemento nella posizione data. dal profondo della disperazione:dhò::jam::bhò:grazie a tutti in anticipo...

filaSCL aggiungi(filaSCL fila,Persona p){
filaSCL temp=(nodoFilaSCL*)malloc(sizeof(nodoFilaSCL));
temp->elemento=p;
temp->next=NULL;
filaSCL ultimo=fila;
while(ultimo->next!=NULL){
ultimo=ultimo->next;
}
ultimo->next=temp;
filaSCL temp1=fila;
return temp1;
}

filaSCL raccomanda(filaSCL fila, Persona p, const int n){
int len=lunghezza(fila);
if(n>len){
return aggiungi(fila,p);
}
else{
int num=n;
filaSCL ultimo=fila;
while(num!=1){
ultimo=ultimo->next;
num--;
}
filaSCL temp=(nodoFilaSCL*)malloc(sizeof(nodoFilaSCL));
filaSCL temp1=ultimo;
temp->elemento=p;
temp->next=temp1;
ultimo=temp;
filaSCL fila2=fila;
return fila2;
}
}



int lunghezza(filaSCL fila){
if(fila!=NULL){
return 1+lunghezza(fila->next);
}
return 0;
}

maseeeeeee
06-09-2014, 09:59
ma la struttura che hai creato dov'è?

ggd94
06-09-2014, 10:02
questo è il mio file header :


struct persona{
char nome[50];
char cognome[50];
};
typedef struct persona Persona;

struct elemSCL{
Persona elemento;
struct elemSCL* next;
};
typedef struct elemSCL nodoFilaSCL;
typedef nodoFilaSCL* filaSCL;

void creaFila(filaSCL* fila,int n);

int is_empty(filaSCL fila);

Persona* capofila(filaSCL fila);

filaSCL servi_capofila(filaSCL fila);

filaSCL aggiungi(filaSCL fila,Persona p);

void stampa(filaSCL fila);

filaSCL raccomanda(filaSCL fila, Persona p, const int n);

oregon
06-09-2014, 10:26
Gli errori possono stare in qualsiasi parte del programma, compreso il main.

Se non fornisci tutto il sorgente compilabile non si possono fare dei test ...

ggd94
06-09-2014, 10:36
ok grazie e scusate...posto di seguito nuovamente tutto il codice ...
Questo è il mio FILE HEADER:


struct persona{
char nome[50];
char cognome[50];
};
typedef struct persona Persona;

struct elemSCL{
Persona elemento;
struct elemSCL* next;
};
typedef struct elemSCL nodoFilaSCL;
typedef nodoFilaSCL* filaSCL;

void creaFila(filaSCL* fila,int n);

filaSCL aggiungi(filaSCL fila,Persona p);

void stampa(filaSCL fila);

filaSCL raccomanda(filaSCL fila, Persona p, const int n);

int lunghezza(filaSCL fila);


FILE-MAIN.C:

int main(){
filaSCL fila3=NULL;
creaFila(&fila3,3);
const int n=2;
Persona p1={"Giulia","G"};
raccomanda(fila3,p1,n);
stampa(fila4);
printf("\n");
return 0;
}


FILE.C:


void creaFila(filaSCL* fila,int n){
if(n!=0){
Persona c;
filaSCL temp=(nodoFilaSCL*)malloc(sizeof(nodoFilaSCL));
printf("inserisci nome:");
scanf("%s",c.nome);
printf("inserisci cognome:");
scanf("%s",c.cognome);
temp->elemento=c;
temp->next=*fila;
*fila=temp;
creaFila(fila,n-1);
}

filaSCL aggiungi(filaSCL fila,Persona p){
filaSCL temp=(nodoFilaSCL*)malloc(sizeof(nodoFilaSCL));
temp->elemento=p;
temp->next=NULL;
filaSCL ultimo=fila;
while(ultimo->next!=NULL){
ultimo=ultimo->next;
}
ultimo->next=temp;
filaSCL temp1=fila;
return temp1;
}

filaSCL raccomanda(filaSCL fila, Persona p, const int n){
int len=lunghezza(fila);
if(n>len){
return aggiungi(fila,p);
}
else{
int num=n;
filaSCL ultimo=fila;
while(num!=1){
ultimo=ultimo->next;
num--;
}
filaSCL temp=(nodoFilaSCL*)malloc(sizeof(nodoFilaSCL));
filaSCL temp1=ultimo;
temp->elemento=p;
temp->next=temp1;
ultimo=temp;
filaSCL fila2=fila;
return fila2;
}
}



int lunghezza(filaSCL fila){
if(fila!=NULL){
return 1+lunghezza(fila->next);
}
return 0;
}

void stampa(filaSCL fila){
if(fila!=NULL){
printf("%s %s ",fila->elemento.nome,fila->elemento.cognome);
stampa(fila->next);
}
}

oregon
06-09-2014, 10:52
Il main non è compilabile ... non esiste fila3 e non esiste p1 ... manca anche creaFila ...

ggd94
06-09-2014, 11:14
ho apportato le modifiche al codice lo avevo scritto correttamente ho avuto qualche problema nel riportarlo,scusa ancora ;) comunque non funziona ugualmente ,la creazione della lista avviene quando però vado a stampare fila3 con l'inserimento dell'elemento p1 mi ristampa fila 3 non modificata

Loading