Ciao a tutti,
Ho questo esercizio da fare, ho pensato a un modo ma che per me era giusto, ma il programma parte e dice che ha smesso di funzionare quando faccio la visualizzazione, quando cerco di far andare la procedura di inserimento, non mi fa vedere neppure il printf, come quando c'è un system(cls).
Quando faccio la visualizzazione, visualizza solo il numero di elementi creati ma vuoti.
Inoltre credo che il fatto del ciclo while nell'inserimento sia sbagliato.
Potreste darmi qualche dritta?
Non deve essere difficile come esercizio ma queste liste sono una brutta rogna.
codice:
/* Data in input una frase costruire una frase carattere per carattere
salvare la frase in una lista in cui ogni elemento si salva un carattere
Sulla lista fare le procedure:
1 visualizzazione
2 inserimento di un nuovo carattere
3 cancellazione di un carattere */
#include <stdio.h>
#include <malloc.h>
#include <string.h>
// DICHIARAZIONE
struct elemento {
char inf;
struct elemento *punt;//PUNTA AL PROSSIMO NODO
};
struct elemento *p0;
char sc;
char frase [15];
void crealista(struct elemento **p0)
{
*p0=NULL;//LISTA VUOTA
}
struct elemento *inserimentoInTesta(struct elemento *p0)
{
struct elemento *p;
int k=0;
printf("inserire una frase\n");
scanf("%c", & frase);
p=(struct elemento*)malloc(sizeof(struct elemento));
while(k<=15)
{
p->inf=frase[k];
k++;
}
if(p0==NULL)//VUOTA..
{
p0=p;
p->punt=NULL;
}
else //INSERIMENTO IN TESTA
{
p->punt=p0;
p0=p;
}
return p0;
}
void VisualizzaLista(struct elemento *p0)
{
if(p0==NULL){printf("lista vuota");}
else{
printf("lista -> ");
// CICLO FINCHE' NON E' VUOTA
while(p0 != NULL)
{
printf("[%c]", p0->inf); // VISUALIZZA L'INFORMAZIONE
printf(" -> ");
p0 = p0->punt; // SCORRE DI UN ELEMENTO
}
}
printf("NULL\n");
}
struct elemento *CancellazionePrimoElemento(struct elemento *p0)
{
struct elemento *h;
if(p0==NULL){printf("lista vuota");}
else{
h=p0;
p0=p0->punt;
free(h);
}
return p0;
}
struct elemento *CancellazioneInCoda(struct elemento *p0)
{
struct elemento *h, *p;
if(p0==NULL)
{printf("lista vuota");}
if(p0->punt==NULL)
{ p0=NULL;
free(p0);}
else{
h=p0;
while(h->punt!=NULL)
{
p=h;
h=h->punt;
}
p->punt=NULL;
free(h);
}
return p0;
}
main()//GESTIONE A MENU
{
crealista(&p0);
do
{
system("cls");
printf("\t- MENU -\n");
printf("Premi 1 per inserire una frase in testa!\n");
printf("Premi 2 per cancellare il primo elemento.\n");
printf("Premi 3 per cancellare l'ultimo elemento.\n");
printf("Premi 4 per visualizzare la lista.\n");
printf("Premi S per uscire... \n ");
scanf("%c", &sc);
if(sc=='4') { VisualizzaLista(p0);system("pause");}
if(sc=='1') {p0=inserimentoInTesta(p0);}
if(sc=='2') {p0=CancellazionePrimoElemento(p0);}
if(sc=='3') {p0=CancellazioneInCoda(p0);}
}
while(sc!='s');
}
Grazie.