Originariamente inviato da Lasentinella
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:
codice:
typedef struct nodo *lista;
struct nodo {
int x; /* Informazione. */
lista next; /* Puntatore al nodo successivo */
};
L'inserisci, che inserisce un nuovo elemento in ordine:
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;
}
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 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;
Io passerei per argomento a di inserisci(&punt_lista,n); ,ovvero la lista che sto creando.. ma mi dà errore!!
edit: metto anche il main:
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;
}
Anche se non scrivete il codice da modificare vi prego di spiegarmi cosa sbaglio! Grazie!
Ho cercato nel forum ma non ho trovato nulla di simile