Aiuto con lista in c

di il
5 risposte

Aiuto con lista in c

a breve ho l'esame di programmazione, mette i soliti eserczi riguardo una lista , leggi lista, stampa su schermo , stampa su file , aggiungi in coda o in posizione, elimina in coda o in posizione. per quanto riguarda il c so fare leggi lista, stampa lista, stampa su file, non ho tempo per studiare le liste dinamiche come potrei aggiungere in codA o in posizione, elimina in coda o in posizione senza usare mettere tanti puntatori.
#include<stdio.h>
#include<string.h>

# define N 6

typedef struct {
char nome[15];
int anno;
char autore[15];

}fumetto;


void acquisisciIndicatore(int* pindicatore);
void leggiFumetti(fumetto fumetti[N], int indicatore);
void leggiFumetto(fumetto* f);
void stampaFumetti (fumetto fumetti[N], int indicatore);
void stampaFumetto(fumetto f);
void stampa(int indicatore, fumetto fumetti[N]);

void main(){
fumetto fumetti[N];
int indicatore;
int* pindicatore=&indicatore;
acquisisciIndicatore(pindicatore);
leggiFumetti( fumetti, indicatore);
stampaFumetti ( fumetti, indicatore);
stampa( indicatore, fumetti);
}


void acquisisciIndicatore(int* pindicatore){
printf("Quanti fumetti ci sono??");
scanf("%d", pindicatore);
while(*pindicatore<0 || *pindicatore>N){
printf("errore..");
scanf("%d", pindicatore);
}
getchar();
return;
}




void leggiFumetti(fumetto fumetti[N], int indicatore){
int i;
for( i=0; i<indicatore; i++){
leggiFumetto(&fumetti);
}
return;
}

void leggiFumetto(fumetto* f){
printf(" Nome :");
gets((*f).nome);
printf("Anno di pubblicazione");
scanf("%d", &(*f).anno);
getchar();
printf("Autore :");
gets((*f).autore);
return;
}

void stampaFumetti ( fumetto fumetti[N], int indicatore){
int i;
printf("ECCO LA COLLEZIONE \n ");
for( i=0; i<indicatore; i++){
stampaFumetto(fumetti);
}
return;
}

void stampaFumetto(fumetto f){
printf("%s \t", f.nome);
printf("%d \t", f.anno);
printf("%s \t", f.autore);
printf("\n");
return;
}
AIUTOOOO E POI??

5 Risposte

  • Re: Aiuto con lista in c

    Non ho capito la domanda.

    Inoltre dovresti utilizzare i tag CODE altrimenti non si capisce il codice.

    Infine, vorresti completato l'esercizio o proponi tu qualcosa?
  • Re: Aiuto con lista in c

    Questo è un esempio di esercizio che ho svolto , venerdi ho l'esame.

    mi serve la procedura per aggiungere o eliminare in coda, per aggiungere o eliminare in una posizione stabilita.

    ho provato a continuare ma le righe di codice sono sbagliate quindi non le ho messe
  • Re: Aiuto con lista in c

    
    include <stdio.h>
    int n=10;
    
    static void main(){
    int pippo[n];
    
    /* questo e' un array, sia che contenga interi.. sia che contenga strutture complesse
        non e' possibile utilizzare un array per inserire record in testa o in coda come se fosse una lista
        devi usare una linked list (te la devi definire a mano) oppure in C++ degli oggetti dinamici che
        hanno gia le operazione di inserimento in testa o in coda.
    */
    }
    
    
  • Re: Aiuto con lista in c

    Potresti fare una cosa... ma e' una boiata pazzesca...

    definisci un array piu grande di quello che ti serve tipo 2*n
    
    #define MAXVEC 100
    
    staic void main(){
    
    int dim = MAXVEC *2;
    
    int myVec[ dim ];
    
    int pTesta = MAXVEC-1
    int pCoda = MAXVEC
    
    //inserimento in coda
    
    myVec[pCoda++] = 10;
    
    
    //inserimento in testa
    
    myVec[pTesta--]=11;
    }
    
    ma prima o poi finirai la memoria disponibile dell'array e il programma andrà in errore...

    per stampare tutti gli interi messi nell'array si fa....
    
    for(int i=pTesta+1;i<pCoda;i++)
        printf("%d\n",myVec[i]);
    
  • Re: Aiuto con lista in c

    Questo è l'abc (spero di non aver fatto errori,sono al cellulare)
    
    typedef struct _LISTA
    {
        int imieivalori;
        struct _LISTA* next;
    }LISTA;
    
    typedef struct _MYLISTA
    {
        LISTA* first;
    }MYLISTA;
    
    LISTA* lst_find(LISTA* base,int imv)
    {
        for (; base != NULL ; base = base->next)
            if ( base->imieivalori == imv) return base;
        return NULL;
    }
    
    LISTA* lst_add(MYLISTA* base,int imv)
    {
        if (base->first == NULL)
        {
            base->first = malloc(sizeof(MYLISTA));
            base->first->imieivalori = imv;
            base->first->next = NULL;
            return base->first;
        }
    
        LISTA* f = base->first;
        for (; f->next != NULL ; f = f->next);
        f->next = malloc(sizeof(MYLISTA));
        f->next->imieivalori = imv;
        f->next->next = NULL;
        return f;
    }
    
    LISTA* lst_add_n(MYLISTA* base,int pos,int imv)
    {
        if (base->first == NULL)
        {
            base->first = malloc(sizeof(MYLISTA));
            base->first->imieivalori = imv;
            base->first->next = NULL;
            return base->first;
        }
    
        LISTA* f = base->first;
        int i;
        for (i = 0; i < pos  && f->next != NULL ; f = f->next);
        f->next = malloc(sizeof(MYLISTA));
        f->next->imieivalori = imv;
        f->next->next = NULL;
        return f;
    }
    
    void lst_remove(MYLISTA* base,int pos)
    {
        if (base->first == NULL) return;
    
        if (pos == 0)
        {
            LISTA* old = base->first;
            base->first = base->first->next;
            free(old);
        }
        else if (pos == -1) //last
        {
            LISTA* f = base->first;
            for (; f->next->next != NULL ; f = f->next);
            LISTA* last = f->next;
            f->next = NULL;
            free(last);
        }
        else //pos as index base 0
        {
            int i;
            LISTA* f = base->first;
            for (i = 0; i < pos - 2 && f->next->next != NULL ; f = f->next);
            LISTA* pos = f->next;
            f->next = pos->next;
            free(pos);
        }
    }
    
    void lst_free(MYLISTA* base)
    {
        LISTA* next;
        for (; base->first != NULL; base->first = next)
        {
            next = base->first->next;
            free(base->first);
        }
    }
    
Devi accedere o registrarti per scrivere nel forum
5 risposte