OFFRO ANNUNCI DI QUALSIASI GENERE GRATIS!! CONTATTATEMI SU EMAIL LINKIAMOCI@EMAIL.IT!!

Ultra torrent

Chat

Tutto di tutto Headline Animator

domenica 10 ottobre 2010

Gestione pila in C

/*Realizzare in C le funzioni per la gestione delle strutture
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:

Qual'è il vostro broswer?