Newsgroup: it.comp.lang.c
Titolo: Inserire una struct in una lista, pila, o coda...

Salve dovre creare un programma in c che prenda in input da file una lista 
di nominativi del tipo:
nome cognome data_nascita;
fin qui nessun problema...
presi i nomi dal file di testo, li inserisco nella struct persona allocata 
dinamicamente, e fin qui ancora nessun problema...
Il problema nasce quando devo inserire la struct persona in una lista, 
oppure in una coda per esempio...
Chi mi aiuta a creare una funzione che mi inserisca in lista la struttura 
persona, in modo da creare una lista di persone, oppure una coda di persone?
io ho pensato ad una cosa tipo questa:
/* Prototipo */
void insert ( ListNodePre *sPtr , Persona *cliente , char nome , char 
cognome , int data_nascita );
ma non so come proseguire... e sinceramente non so nemmeno se sia esatto 
pensare ad una funzione di inserimento in lista fatta in questo modo.
Vorre solo sapere come poter inserire una struttura in una lista, o una 
coda, o una pila, passando alla funzione insert, push o quel che sia, il 
valore di tutti i campi della struttura che sono stati prelevati in anticipo 
da un file di testo.
Grazie anticipatamente a chi vorrą aiutarmi! 

 fin qui nessun problema...








Non so se ho compreso:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct recordpersona
  {
    char nome[128];
    char cognome[128];
    int datadinascita;
    struct recordpersona * prossimo;
  } persona;
/* stack (o pila) */
struct recordpersona *
push(struct recordpersona * lista, struct recordpersona * nuovo)
{
  nuovo->prossimo = lista;
  return nuovo;
}
struct recordpersona *
pop(struct recordpersona * lista, struct recordpersona ** ultimoinserito)
{
  *ultimoinserito = lista;
  return lista->prossimo;
}
int main()
{
  struct recordpersona * rp, * pila, * temp;
  pila = NULL;
  /* inserisco 4 records allocati dinamicamente con malloc() */
  rp = (struct recordpersona *) malloc(sizeof(struct recordpersona));
  strcpy(rp->nome, "uno");
  strcpy(rp->cognome, "UNO");
  rp->datadinascita = 1970;
  pila = push(pila, rp);
  rp = (struct recordpersona *) malloc(sizeof(struct recordpersona));
  strcpy(rp->nome, "due");
  strcpy(rp->cognome, "DUE");
  rp->datadinascita = 1975;
  pila = push(pila, rp);
  rp = (struct recordpersona *) malloc(sizeof(struct recordpersona));
  strcpy(rp->nome, "tre");
  strcpy(rp->cognome, "TRE");
  rp->datadinascita = 1980;
  pila = push(pila, rp);
  rp = (struct recordpersona *) malloc(sizeof(struct recordpersona));
  strcpy(rp->nome, "quattro");
  strcpy(rp->cognome, "QUATTRO");
  rp->datadinascita = 1985;
  pila = push(pila, rp);
  /* riestraggo i 4 record inseriti e libero la memoria con free() */
  pila = pop(pila, &rp);
  printf ("Nome: %s\nCognome: %s\nData di Nascita: %d\n\n",
                  rp->nome, rp->cognome, rp->datadinascita);
  free(rp);
  pila = pop(pila, &rp);
  printf ("Nome: %s\nCognome: %s\nData di Nascita: %d\n\n",
                  rp->nome, rp->cognome, rp->datadinascita);
  free(rp);
  pila = pop(pila, &rp);
  printf ("Nome: %s\nCognome: %s\nData di Nascita: %d\n\n",
                  rp->nome, rp->cognome, rp->datadinascita);
  free(rp);
  pila = pop(pila, &rp);
  printf ("Nome: %s\nCognome: %s\nData di Nascita: %d\n\n",
                  rp->nome, rp->cognome, rp->datadinascita);
  free(rp);
  return 0;
}
Guarda l' esempio di push() e pop().
Questo per la struttura dati "pila" ad accesso FIFO, per la coda
devi gestire due puntatori, uno che puntera' sempre al primo e
l' altro che avanzera' con gli inserimenti per permettere
l' inserimento del prossimo senza che possa tornare indietro.
Quindi il valore il finecoda->prossimo sara' il valore dell'
argomento 'nuovo' e nuovo->prossimo = NULL;
Liste pi' complesse possono preverede piu' puntatori per nodo.
ciao
Roberto.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Grazie veramente!
Proverň a seguire le tue istruzioni!
A presto. Vincent 

 Questo per la struttura dati "pila" ad accesso FIFO, per la coda
RettiFichina!! (Con molto ritardo)
pila o stack ad accesso LIFO (Last In First Out). L' accesso FIFO
(First In First Out) e' tipice delle code o queue
Ciao
Roberto
