Ciao a tutti, questo è il mio primo post! sono uno studente universiario e mi sto preparando per l'esame.. ho dei seri problemi con un esercizio che chiede di:
- creare una struttura assegnare alla struttura un elemento char e un puntatore alla struttura stessa (lista lineare semplice)
-di inserire caratteri con getchar() fino a quando non si inserisce il carattere di terminazione 0
-di stampare la lista fino a quando non incontra NULL (terminatore di lista)
-di liberare la memoria precedentemente allocata terminare il programma
Bene adesso faccio una cosa piuttosto molesta e allego il sorgente che è raggruppato in unico file.
P.S. se ci fosse un metodo meno invasivo di questo per allegare il codice fatemelo sapere!!
#include <stdio.h>
#include <malloc.h>
typedef struct st_listElem
{
char elem;
struct st_listElem *next;
} listElementType;
listElementType* initList();
int myFlushInput();
int printList(listElementType *p);
void freeMemory(listElementType *p);
int main()
{
listElementType *p;
p=initList();
printList(p);
//freeMemory(p);
return 0;
}
listElementType* initList()
{
listElementType *p, *punt;
char elem;
if (punt->elem=='0')
{
p= NULL; // LISTA VUOTA
return (p);
}
else
{
p= (listElementType *) malloc(sizeof(listElementType));
punt= p;
printf("Inserisci il primo carattere della lista\n");
punt->elem=getchar();
myFlushInput();
while(punt->elem!='0')
{
punt->next = (listElementType *) malloc(sizeof(listElementType));
punt=punt->next;
printf("Inserisci un altro carattere nella lista,"); printf("inserisci 0 per terminare..\n");
punt->elem=getchar();
myFlushInput();
}
punt->next= NULL; // MARCATORE DI FINE LISTA
punt=p;
}
return (p);
}
int myFlushInput()
{
while(getchar() != '\n');
return 0;
}
int printList(listElementType *p)
{
listElementType *punt;
punt=p;
printf("\nStampa degli elementi della lista\n");
while(punt!=NULL)
{
printf("\t%c",punt->elem); // stampa il carattere della lista
punt=punt->next; // scorre di un elemento
}
printf("\tNULL");
punt=p;
return 0;
}
void freeMemory(listElementType *p)
{
listElementType *punt;
punt=p;
while(p!=NULL);
{
punt=punt->next;
free(punt);
}
punt=p;
}
provare per credere, se non chiamo la funzione frememory().. il programma va che è una meraviglia, se nel main chiamo la funzione frememory non stampa nulla, quasi come se la memoria venisse liberata anticipatamente.
So che ci sono delle imperfezioni a livello di codice, per adesso però vorrei riuscire a risolvere questo problemino. Poi avrei un'altra domanda ma se qualcuno avrà pazienza di starmi dietro lo espongo più avanti.
Grazie in anticipo.