View Single Post
Old 15-05-2005, 18:12   #4
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
vabbè va, nella mia enorme bontà, guarda che cosa ti ho postato:
Codice:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

typedef struct _nodo {
	char *nome, *indirizzo;
	struct _nodo *next;
} nodo, *lista;

nodo *crea(char *nome, char *indirizzo) {
	nodo *n = (nodo*)malloc(sizeof(nodo));
	n->nome = (char*)malloc(strlen(nome) + 1);
	strcpy(n->nome, nome);
	n->indirizzo = (char*)malloc(strlen(indirizzo) + 1);
	strcpy(n->indirizzo, indirizzo);
	n->next = NULL;
	return n;
}

void libera(nodo *n) {
	free(n->nome);
	free(n->indirizzo);
	free(n);
}

int main() {
	char nome[100], indirizzo[100];
	char *sentinella = "fine";
	lista l = NULL;
	nodo *ultimo = NULL;
	while (1) {
		printf("nome: ");
		scanf("%s", nome);
		if (!stricmp(nome, sentinella)) {
			break;
		}
		printf("indirizzo: ");
		scanf("%s", indirizzo);
		if (!stricmp(indirizzo, sentinella)) {
			break;
		}
		if (ultimo) {
			ultimo->next = crea(nome, indirizzo);
			ultimo = ultimo->next;
		}
		else {
			ultimo = crea(nome, indirizzo);
			l = ultimo;
		}
	}
	// qui di seguito scrivo il codice per la deallocazione,
	// ma non sono sicuro che rientri negli obiettivi dell'esercizio,
	// quindi casomai lasciala perdere.
	ultimo = l;
	while (ultimo) {
		nodo *n = ultimo;
		ultimo = n->next;
		libera(n);
	}
	return 0;
}
non l'ho provato, quindi potrebbe non funzionare, però intanto spero che tu capisca come si fa
ciao

Ultima modifica di 71104 : 15-05-2005 alle 18:24.
71104 è offline   Rispondi citando il messaggio o parte di esso