Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 28
  1. #1

    [C] liste. . .bha vediamo un po' -.-'

    Oggi e' un giorno particolare sono quasi vicino nel capire le liste

    Vediamo se qualche anima pia dispersa in questo forum, e' cosi volenterosa da darmi una mano...

    So che esistono vari tipi di strutture dinamiche (liste, code, pile, alberi) tutte un po simili tra di loro chi con un puntatore in piu chi con uno in meno...

    Per ora mi limito a studiare quelle semplici semplici,

    LISTA MONODIREZIONALE:

    mi baso su questa struttura dinamica
    Codice PHP:
    struct nodo{
       
    char data[50];
       
    struct nodo *next;
    }
    struct nodo *lista=NULL;
    struct nodo el
    definisco questa funzione

    Codice PHP:
    struct nodo *creaelemento(void){
       
    struct nodo *temp;
       
    temp=(struct nodo*)malloc(sizeof(struct nodo));
       if(
    temp!=NULL){
          
    printf("Valore da inserire: ");
          
    scanf("%s"temp->data);
          
    temp->next=NULL;
          return (
    temp);
       }
       else{
           
    printf("Impossibile allocare");
           return;
        }

    con questa funzione vado nel main e ci metto:

    Codice PHP:
    elemento=creaelemento(); 
    assegna ad elemento una nuova area di memoria del tipo struct nodo con all'interno il valore richiesto a terminale. . . .

    A questo punto ecco le mie domande:

    1- come faccio a collegarlo?
    2- in questo caso ho definito UN elemento, per definirne altri, e collegarli in successione? (ponendo il caso che a priori non conosca quanti nuovi elementi devo inserire)

    ciao ciao

    e grazie

    Se una funzione riceve come argomento un puntatore di puntatore di puntatore quando la invochi ricordati che puo ricevere o un puntatore di puntatore di puntatore o l'indirizzo di un puntatore di puntatore

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: [C] liste. . .bha vediamo un po' -.-'

    Intanto direi di modificare la funzione cosi' ...

    codice:
    struct nodo *creaelemento(void)
    {
       struct nodo *temp;
       temp=(struct nodo*)malloc(sizeof(struct nodo));
       if(temp)
       {
          printf("Valore da inserire: ");
          scanf("%s", temp->data);
          temp->next=NULL;
       }
       else
          printf("Impossibile allocare");
    
       return (temp);
    }
    Poi, per le domande ...

    1- come faccio a collegarlo?
    La tua lista inizia da qualche parte ...

    Avrai definito nel main la "testa" della lista, ovvero un puntatore al primo elemento della lista, che inizialmente sara' NULL.

    A questo punto, potrai inserire il nuovo elemento facendo puntare la testa della lista al nuovo elemento e mettendo il vecchio valore del puntatore alla testa nel puntatore del primo elemento.

    2- in questo caso ho definito UN elemento, per definirne altri, e collegarli in successione? (ponendo il caso che a priori non conosca quanti nuovi elementi devo inserire)
    Farai tante volte quanto ti serve quello ho appena descritto.

    P.S. Modifica il titolo ...

  3. #3

    Re: Re: [C] liste. . .bha vediamo un po' -.-'

    Originariamente inviato da oregon
    La tua lista inizia da qualche parte ...

    Avrai definito nel main la "testa" della lista, ovvero un puntatore al primo elemento della lista, che inizialmente sara' NULL.
    Ho inizializzato a livello globale

    struct nodo *lista=NULL;

    . . .nn va bene farlo cosi?

    A questo punto, potrai inserire il nuovo elemento facendo puntare la testa della lista al nuovo elemento e mettendo il vecchio valore del puntatore alla testa nel puntatore del primo elemento.

    Farai tante volte quanto ti serve quello ho appena descritto.
    chiedo troppo se mi fai un esempio. . . .riuscirei a capire meglio !

    P.S.
    ma come ti chiamavano flesh gordon??
    Se una funzione riceve come argomento un puntatore di puntatore di puntatore quando la invochi ricordati che puo ricevere o un puntatore di puntatore di puntatore o l'indirizzo di un puntatore di puntatore

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: Re: Re: [C] liste. . .bha vediamo un po' -.-'

    Originariamente inviato da donato.sciarra
    Ho inizializzato a livello globale

    struct nodo *lista=NULL;

    . . .nn va bene farlo cosi?
    Sì ... va bene ...

    chiedo troppo se mi fai un esempio. . . .riuscirei a capire meglio !
    Scrivendo al volo ...

    codice:
    struct nodo *nuovo;
    
    nuovo = creaelemento();
    if(nuovo)
    {
       nuovo->next = lista;
       lista = nuovo;
    }

  5. #5
    VVoVe:

    vediamo se ho capito:
    Codice PHP:
    struct nodo *nuovo/*crea un nuovo puntatore alla struttura della lista*/

    nuovo creaelemento(); /*assegno a nuovo l'area di memoria allocata con il dato chiesto a terminale*/
    if(nuovo){/*se non e' NULL*/
       
    nuovo->next lista;/*raggiungo il campo next nell'area di heap allocata e assegno a next l'indirizzo contenuto in lista(praticamente NULL)*/
       
    lista nuovo;/*e al puntatore lista assegno l'indirizzo contenuto in nuovo, quindi ora tramite lista posso accedere all'area creata dinamicamente (nell'heap)*/


    ho ancora un dubbio, ma come faccio per creare nuovi elementi????????
    nn riesco a capirlo
    cioè io per creare un nuovo nodo della lista devo creare un nuovo puntatore a cui andrò ad assegnarci tramite la funzione creaelemento() una nuova area di memoria, ma se non conosco quanti elementi devo creare come faccio poi a crearne di nuovi? non so se riesco ad essere chiaro . . .

    in questo esempio per creare il nodo e' stato creato un nuovo puntatore alla struttura

    struct nodo *nuovo;

    a cui poi tramite la funzione creaelemento() gli e' stata assegnata la nuova area di memoria. . .

    ma se dovessi crearne un altro?
    come faccio in runtime a definire un nuovo puntatore alla struttura?
    Mettiamo che devo costruire un programma che chiede a terminale dei valori e gli inserisce uno per uno nella lista fin quando l'utente non digitata lo zero (banale se fosse un vettore).
    Io nn conosco quanti elementi l'utente tenterà di inserire!
    Come posso gestire questo caso?
    Se una funzione riceve come argomento un puntatore di puntatore di puntatore quando la invochi ricordati che puo ricevere o un puntatore di puntatore di puntatore o l'indirizzo di un puntatore di puntatore

  6. #6
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    nuovo->next=lista; così a occhio credo non serva.
    Già in creaelemento() lo fai puntare a null.

    volendo comunque puoi passare alla funzione l'indirizzo di memoria del puntatore (un puntatore a puntatore) e invece di far ritornare un puntatore alla funzione creaelemento, modifichi l'indirizzo a cui punta direttamente nella funzione. alla fine della fiera comunque non cambia nulla.

    Originariamente inviato da donato.sciarra

    Mettiamo che devo costruire un programma che chiede a terminale dei valori e gli inserisce uno per uno nella lista fin quando l'utente non digitata lo zero (banale se fosse un vettore).
    Io nn conosco quanti elementi l'utente tenterà di inserire!
    Come posso gestire questo caso?
    usi un ciclo while...

  7. #7
    potresti farmi un esempio???

    basandoti su quanto scritto in precedenza . . . che gia ci sto a capì poco. . .
    Se una funzione riceve come argomento un puntatore di puntatore di puntatore quando la invochi ricordati che puo ricevere o un puntatore di puntatore di puntatore o l'indirizzo di un puntatore di puntatore

  8. #8
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    codice:
    printf("Valore da inserire: ");
    scanf("%d", &val);
    while(val){
       creaelemento(val);
       printf("Valore da inserire: ");
       scanf("%d", &val);
    }
    ovviamente modificando la funzione creaelemento di conseguenza...

  9. #9
    cioè?

    in che modo.....di conseguenza?

    perche come l'hai scritta e'chiaro che non funziona....cosa c'è da aggiungere nella funzione creaelemento() ?

  10. #10
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    direi che non c'è nulla da aggiungere, semmai devi togliere la parte che ho messo nel ciclo while, quella di richiesta del valore.

    codice:
    struct nodo *creaelemento(int val)
    {
       struct nodo *temp;
       temp=(struct nodo*)malloc(sizeof(struct nodo));
       if(temp)
       {
          temp->data=val;
          temp->next=NULL;
       }
       else
          printf("Impossibile allocare");
    
       return (temp);
    }
    Il mio ciclo while era in risposta alla tua domanda "come fare per gestire un numero di inserimenti non noti a priori da concludersi alla digitazione dello zero"...

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.