Problema creazione coda e pila con liste lineari generiche

di il
1 risposte

Problema creazione coda e pila con liste lineari generiche

Ragazzi ecco il mio esercizio:
Realizzare in C  le funzioni per la gestione, mediante menù, delle strutture dati   C  pila   e   coda   mediante   lista
lineare dinamica e generica   con [rispettivamente senza] nodo sentinella
Per ora ho provato a farlo senza nodo sentinella e ho problemi con la coda...la pila sia eliminazione che inserimento riescono, ma nella coda non inserisce niente...vi passo il codice
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
    {
       char nome[20];
       int eta;
    }INFO_FIELD;
void *crealista();
void print_lista(void *);
void inserisci_pila(short , INFO_FIELD , void **);
void inserisci_coda(short , INFO_FIELD , void **);
void elimina_nodo(void **);
void main ()
{
 struct Persona
        {
            INFO_FIELD info;
            struct Persona *p_next;
        };
 int op, op1, op2, menu1=100, menu2=100;
 short len;
 INFO_FIELD nuovo;
 struct Persona *top, *punt;
 top=(struct coda *)crealista();
 printf("Selezionare cosa si intende gestire:\n\n");
 printf("1=Pila\n");
 printf("2=Coda");
 scanf("%d",&op);

 switch (op){
 case 1: while (menu1 <= 100){
          puts("\n\n\n======================================");
          puts("GESTIONE DI UNA PILA (tramite lista lineare generica)");
          puts("===========================================\n\n");
          puts("Selezionare l'operazione:\n");
          puts("1=Visualizzare la Pila");
          puts("2=Inserire un elemento");
          puts("3=Eliminare un elemento");
          scanf("%d",&op1);

          switch(op1){
          case 1:  print_lista(top); break;
          case 2: printf("Inserisci nome:\t");
                  scanf("%s",nuovo.nome);
                  printf("inserisci eta\':\t");
                  scanf("%d",&nuovo.eta);
                  len=sizeof(nuovo);
                  inserisci_pila(len,nuovo,&top);

                  printf("Lista aggiornata:\n\n");
                      print_lista(top); break;
          case 3: elimina_nodo(&top);
                    printf("Lista aggiornata:\n\n");
                      print_lista(top);break;
                      }
}
case 2:
while (menu2 <= 100){
          puts("\n\n\n======================================");
          puts("GESTIONE DI UNA CODA (tramite lista lineare generica)");
          puts("===========================================\n\n");
          puts("Selezionare l'operazione:\n");
          puts("1=Visualizzare la Coda");
          puts("2=Inserire un elemento");
          puts("3=Eliminare un elemento");
          scanf("%d",&op2);

         switch(op2){
          case 1: print_lista(top); break;
          case 2: punt=top;
                  /*while(punt->p_next)
                    {
                        punt = punt->p_next;
                    }*/
                  printf("Inserisci nome:\t");
                  scanf("%s",nuovo.nome);
                  printf("inserisci eta\':\t");
                  scanf("%d",&nuovo.eta);
                  len=sizeof(nuovo);
                inserisci_coda(len,nuovo,&punt);
                printf("Lista aggiornata:\n\n");
                      print_lista(top);break;
          case 3: elimina_nodo(&top);
                    printf("Lista aggiornata:\n\n");
                      print_lista(top); break;
          }}
   }
}
void *crealista()
{
struct coda {
INFO_FIELD info;
struct coda *p_next;
};

struct coda *testa;
testa=NULL;
return testa;
}
void print_lista(void *pl)
 {
       struct Persona
        {
            INFO_FIELD info;
            struct Persona *p_next;
        };
       int i=0;
       printf("\n\n");
       printf("lista:\n");
       while (((struct Persona *)pl)){
          i++;
          printf("%d=Nome:%s\tEta':%d\n", i , ((struct Persona *)pl)->info.nome, ((struct Persona *)pl)->info.eta);
          pl = ((struct Persona *)pl)->p_next;
       }
       printf("\n\n");
 }
 void inserisci_pila(short len_info, INFO_FIELD p_dato, void **p_head)
 {
       struct lista
            {
                INFO_FIELD info;
                struct lista *p_next;
            }*ptr;
    ptr=calloc(1, sizeof(struct lista));
    ptr->info = p_dato;
    ptr->p_next=(struct lista *)*p_head;
    *p_head= ptr;
 }
void inserisci_coda(short len_info, INFO_FIELD p_dato, void **p_punt)
{
    struct lista
            {
                INFO_FIELD info;
                struct lista *p_next;
            }*ptr;
ptr=calloc(1, sizeof(struct lista));
ptr= (struct lista *)calloc(1,sizeof(struct lista));
ptr->info = p_dato;
(ptr->p_next) = ((struct lista *)p_punt)->p_next;
((struct lista *)p_punt)->p_next=ptr;
}
 void elimina_nodo(void **p_head)
 {
     struct lista
        {
            INFO_FIELD info;
            struct lista *p_next;
        } *ptr;
     ptr=((struct lista *)*p_head)->p_next;
     free((struct lista *)*p_head);
     *p_head=ptr;
 }

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte