Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    9

    Spiegazione esercizio, non capisco questo esercizio qualcuno può spiegarlo nei dettagli? Soprattutto il malloc

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    struct elem{
        char cod[5];
        int imp;
        struct elem *next;
    };
    
    
    struct elem *corrente;
    struct elem *primo, * nuovo;
    void inser(void);
    void visual(void);
    void sistema(void);
    
    
    
    
    main()
    {
        int sc;
        primo = NULL;
        
        while (sc != 3)
        {
            printf("1-Inserimento struct alla catena\n2-Visualizzazione catena\n3-Uscita\n");
            printf("Scegli un'operazione da eseguire\n");
            scanf("%d", &sc);
            switch (sc)
            {
                case 1:
                    inser();
                    system("cls");
                    break;
                    
                case 2:
                    visual();
                    getch();
                    system("cls");
                    break;
                
                case 3:
                    system("cls");
                    printf("Uscita dal programma");
                    break;
                    
                default:
                    printf("Scelta errata\n");
                    getch();
                    system("cls");
            }
        }
    }
    
    
    void inser()
    {
        char mycod[5] = "\0";
        int myimp = 0;
        
        nuovo = malloc(sizeof (struct elem *));
        if (nuovo != NULL)
        {
            printf("Inserisci un codice\n");
            scanf("%s", mycod);
            printf("Inserisci un importo\n");
            scanf("%d", &myimp);
            
            strcpy(nuovo->cod, mycod);
            nuovo->imp = myimp;
            nuovo->next = NULL;
            sistema();
        }
        else
            printf("Spazio in RAM insufficiente\n");
    }
    
    
    void sistema()
    {
        if (primo == NULL)
            primo = nuovo;
        else
        {
            corrente = primo;
            while (corrente->next != NULL)
                corrente = corrente->next;
            
            corrente->next = nuovo;        
        }
    }
    
    
    void visual()
    {
        for (corrente = primo; corrente!= NULL; corrente = corrente->next)
            printf("%s\t%d\n", corrente->cod, corrente->imp);
    }
    Ultima modifica di MItaly; 28-01-2015 a 14:42 Motivo: Tag CODE

  2. #2

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    A parte che ti è giù stato risposto altrove, dovresti scrivere quello che vuoi nel testo del thread e non nel titolo ...

    In tutti i casi, non è possibile una spiegazione linea per linea in dettaglio, non siamo a scuola ... ma se vuoi leggere qualcosa della malloc, ti ho dato già un link. Dicci cosa non ti è chiaro, dopo averlo letto e ne parliamo.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4

    Moderazione

    Il cross-posting su altri forum non è vietato, ma comunque non è ben visto. Ma più che altro, come ha detto oregon, non ha senso venire a chiedere spiegazioni riga per riga di centinaia di righe di codice, individua il punto che non ti è chiaro e chiedi di quello.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    Questo esercizio e' sulle linked list. Una linked list e' una lista i cui elementi si linkano fra loro. Questo ti permette di avere una struttura molto piu efficiente di un banale array, visto che gli elementi per se posson esser locali ovunque in memoria e gli inserimenti/rimozioni son relativamente semplici (si tratta di cambiar un puntatore). Puoi trovar single o double linked lists. Nel tuo caso hai una single, ovvero un elemento punta all'elemento a lui successivo, ma non al precedente (struct elem *next).

    Affinche' la linked lista sia integra, devi mantenere constantemente un puntatore al suo primo elemento. Nel codice si chiama appunto primo.

    Quando viene inserito un nuovo elemento viene dapprima allocata la memoria per la struttura (malloc). I suoi elementi sono inizializzati. Dopodiche' avviene la magia: i puntatori a primo e nuovo vengon mossi in modo da inserire il nuovo elemente nella posizione corretta. Nota che l'ultimo elemento della lista avra' il puntatore a next = NULL. Questo ti permette di iterare la lista senza accedere ad aree di memoria che non ti appartengono.

    Come esercizio potresti trasformarla in una double linked list, aggiungendo un puntatore a prev (che nella testa della coda punta a NULL).
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.