Ciao a tutti![]()
Devo realizzare una coda che ha due metodi, uno (leggi) che riceve una sequenza di numeri interi (finché l'utente non ne inserisce uno negativo) e costruisce una lista, restituendo il puntatore alla testa.
L'altro metodo (inserisci ) inserisce nella lista un nuovo elemento x, mantenendo l'ordinamento e ritorna il puntatore al nodo inserito (da fare ricorsivamente).
Questa è la lista:
L'inserisci, che inserisce un nuovo elemento in ordine:codice:typedef struct nodo *lista; struct nodo { int x; /* Informazione. */ lista next; /* Puntatore al nodo successivo */ };
Del codice qui sopra mi sembra manchi l'istruzione che dice all'elemento precedente a quello inserito di puntare a temp, cioé inserisco temp ma non viene "agganciato alla coda"..ma non capisco come fare!codice:lista inserisci(lista *punt_lista, int x) { lista temp; if(*punt_lista == NULL || (*punt_lista)->x >=x){ temp = (lista)malloc(sizeof(struct nodo)); temp->x = x; temp->next= *punt_lista; } else inserisci(&temp->next, x); return temp; }
Io passerei per argomento a di inserisci(&punt_lista,n); ,ovvero la lista che sto creando.. ma mi dà errore!!codice:lista leggi(void) { lista punt_lista; lista temp; int n; printf("Immetti una sequenza di interi terminata da un numero negativo: "); do{ scanf("%d",&n); if(n>=0){ temp=(lista)malloc(sizeof(struct nodo)); if(!temp) { printf("Allocazione memoria non riuscita"); return NULL; } else{ inserisci(&(temp->next),n); punt_lista=temp; free(temp); } } }while(n>=0); return punt_lista;
edit: metto anche il main:
Anche se non scrivete il codice da modificare vi prego di spiegarmi cosa sbaglio! Grazie!codice:#include <stdio.h> lista leggi(void); int main(void) { lista L[5]; L[0]=leggi(); L[1]=leggi(); printf("\nL1="); stampa(L[0]); printf("\nL2="); stampa(L[1]); system("PAUSE"); return 0; }
Ho cercato nel forum ma non ho trovato nulla di simile![]()
![]()

Rispondi quotando