Salve ragazzi,
sto perdendo la testa su un programma che secondo me è tanto difficile quanto inutile..
Allora, dovevo creare un programma per la gestione di una Pila tramite una linked list (e ci sono riuscito), successivamente ho dovuto creare la stessa gestione con il nodo sentinella (e pure ci sono riuscito) e per finire devo creare lo stesso identico programma mediante l'uso di una lista generica..
Io ho scritto il programma ma mi da quattro errori sui vari cast:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char c;
} ELEMENT;
void *crealista();
void ins_nodo(short len, ELEMENT dato, void *head);
void elim_nodo(void *head);
void main()
{
struct pila {
ELEMENT info;
struct pila *p_next;
};
ELEMENT dato;
struct pila *head, *punt;
short scelta=1, elem=0, sentinella=0, len;
head=(struct pila *)crealista(); //creo il nodo sentinella
head=calloc(1,sizeof(struct pila));
len=sizeof(ELEMENT);
while(scelta!=0) //entro nel menu..
{
system("cls");
printf(" ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n");
printf(" º Programma per la GESTIONE DI UNA PILA TRAMITE LISTA º\n");
printf(" ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n");
if(elem>0)
{
printf("\n Ecco la tua pila:\n\n"); //visualizzo la pila
punt=head;
printf("\t ÉÍÍÍ»\n");
sentinella=0;
while(punt->p_next!=NULL)
{
if(sentinella==1) printf("\t º %c º\n",punt->info.c);
sentinella=1;
punt=punt->p_next;
}
printf("\t º %c º\n",punt->info.c);
printf("\t ÈÍÍͼ\n");
}
else printf("\n La PILA e' attualmente vuota..\n"); //se la pila è vuota..
puts("");
//menù
printf(" ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n");
printf(" º ---> 1 per aggiungere un elemento alla PILA º\n");
printf(" º ---> 2 per eliminare un elemento dalla PILA º\n");
printf(" º ---> 3 per uscire dal programma... º\n");
printf(" ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n");
printf("\n Scelta: "); fflush(stdin); scanf("%d",&scelta);
if(scelta==1) //se scelgo 1..
{
do{
printf("\n Inserisci il carattere da inserire nella PILA: "); fflush(stdin); scanf("%c",&dato.c);
if(dato.c=='\n') printf(" ---> ERRORE: Il carattere INVIO non e' ammesso nella PILA!\n");
}while(dato.c=='\n'); //se inserico INVIO non mi ripete l'inserimento..
ins_nodo(len,dato,head);
printf("\n Elemento inserito!\n\n");
elem++;
}
if(scelta==2) //se scelgo 2..
{
if(elem==0) printf("\n La tua pila e' VUOTA!!\n"); //se la pila è gia vuota..
else
{
elim_nodo(head);
elem--;
printf("\n Elemento eliminato!!\n"); //altrimenti effettuo eliminazione in testa..
}
}
printf("\n\n"); system("pause");
}
}
void *crealista()
{
struct pila {
ELEMENT info;
struct pila *p_next;
};
struct pila *testa;
testa=NULL;
return testa;
}
void ins_nodo(short len, ELEMENT dato, void *head)
{
struct pila {
ELEMENT info;
struct pila *p_next;
};
struct pila *ptr;
ptr=calloc(1,sizeof(struct pila));
memcpy(ptr,dato,len);
ptr->p_next=(struct pila *)head->p_next;
(struct pila *)head->p_next=ptr;
}
void elim_nodo(void *head)
{
struct pila {
ELEMENT info;
struct pila *p_next;
};
struct pila *eliminato;
eliminato=(struct pila *)head->p_next;
(struct pila *)head->p_next=eliminato->p_next; //l'elemento precedente punta a quello successivo a quello eliminato
free(eliminato);
}
Ho seguito passo passo le parole della prof ma non vuole saperne di partire.. Credo di essermi perso con qualche puntatore.. Ma non riesco a capire il perchè..
Grazie per eventuali consigli..