dati pila e coda mediante lista dinamica e generica rispettivamente nodo sentinella
*/
#include
#include
#include
typedef struct
{//STRUTTURA GLOBALE PER LA LISTA GENERICA E QUELLA DEL MAIN.
int dato;
int nome[20];
} INFO_FIELD;
void push (void **head, INFO_FIELD dato, char len_dato);
void pop (void **head);
void main()
{
typedef struct LISTA
{
INFO_FIELD info_lista;
struct LISTA *p_next;
} LISTA;
LISTA *head, *p_punt;//TESTA DELLA PILA E PUNTATORE DI VISITA.
int scelta;
INFO_FIELD valore;
head = NULL;
while (1) {
printf ("Simulazione di una pila (tramite lista lineare)\n\n");
printf ("<1> - > PUSH: Inserisce un elemento alla testa della pila\n\n");
printf ("<2> - > POP: Elimina un elemento dalla testa dello stack\n\n");
printf ("<3> - > Visualizza la pila corrente\n\n");
printf ("<4> - > Esce dal programma\n\n");
printf ("Inserire l'operazione da effettuare: ");
scanf ("%d", &scelta);
p_punt = head;
printf ("\n");
//PUSH.
if (scelta == 1)
{
printf ("Hai selezionato l'operazione di PUSH.\n\n");
printf ("Inserire un valore: ");
scanf ("%d", &valore.dato);
push (&head, valore, sizeof(INFO_FIELD));
}
//POP.
else if (scelta == 2)
{
if (p_punt == NULL)
printf ("Impossibile effettuare l'operazione di POP in quanto la pila e' vuota.\n\n");
else {
printf ("Operazione di POP.\n\n");
pop (&head);
}
}
//VISUALIZZA PILA.
else if (scelta == 3)
{
if (p_punt == NULL)
printf ("Impossibile visualizzare la pila in quanto e' vuota.\n\n");
else
{
printf ("Visualizzazione della pila\n\n");
do
{
printf ("\t\t%d\n\n", p_punt -> info_lista.dato);
p_punt = p_punt -> p_next;
} while (p_punt != NULL);
}
}
//ESCE DAL PROGRAMMA.
else if (scelta == 4)
{
printf ("Chiusura del programma. Arrivederci %c\n\n", 1);
exit(1);
}
printf ("\n");
system ("pause");
system ("cls");
}
}
//INSERISCE UN ELEMENTO IN TESTA ALLA PILA.
void push (void **head, INFO_FIELD dato, char len_dato)
{
typedef struct generico
{//LISTA GENERICA.
INFO_FIELD info_generico;
struct generico *p_next;
} GENERICO;
GENERICO *punt;
punt = malloc (sizeof (GENERICO));
memcpy (punt, &dato, len_dato); //COPIA IL BLOCCO DELLA VARIABILE DATO,
//NEL BLOCCO PUNTATO DA PUNT(SIZE=LEN_DATO).
punt -> p_next = (GENERICO *)(*head);
(GENERICO *)(*head) = punt;
}
//ELIMINA UN ELEMENTO DALLA TESTA DELLA PILA.
void pop (void **head)
{
typedef struct generico
{//LISTA GENERICA.
INFO_FIELD info_generico;
struct generico *p_next;
} GENERICO;
GENERICO *punt;
punt = (GENERICO *)(*head);
(GENERICO *)(*head) = ((GENERICO *)(*head)) -> p_next;
free (punt);//PUNT E' UTILE LIBERARE MEMOR
Nessun commento:
Posta un commento