Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    2

    [C++] Esercizio puntatori, invertire una pila (struttura dinamica)

    Devo invertire i nodi di una pila, creando una funzione apposita (inverti)
    Il programma di base è:

    #include <iostream.h>

    struct nodo
    {
    int info; // parte informativa elemento pila
    struct nodo *succ; // puntatore al prossimo elemento pila
    };

    struct nodo *testa; // definisce un puntatore al primo elemento di pila (testa)
    char scelta; // scelta menu
    bool finito; // termina programma


    void inizializza(void);
    bool pilavuota(void);
    void inverti(void);
    void push(void);
    void pop(void);
    void stampa(void);

    int main()
    {
    inizializza();
    finito = false;

    do
    {
    cout << endl;
    cout << "0: Termina esecuzione" << endl;
    cout << "1: inserimento elemento in pila" << endl;
    cout << "2: estrazione elemento in pila" << endl;
    cout << "3: stampare elementi della pila" << endl;
    cout << "4: Inverti pila" << endl
    do
    {
    cout << "Scelta opzione: ";
    cin >> scelta;
    cout << endl;
    }while((scelta < '0') and (scelta >'3'));

    switch(scelta)
    {
    case '0':
    finito = true;
    break;
    case '1':
    push();
    break;
    case '2':
    pop();
    break;
    case '3':
    stampa();
    break;
    case '4':
    inverti();
    break;
    }
    }while(finito == false);
    }

    void inizializza(void)
    {
    testa=NULL;
    }

    void push(void)
    {
    struct nodo *nuovo; // puntatore a nuovo elemento
    int numero;
    cout << "\nNuovo elemento informativo: ";
    cin >> numero;
    nuovo = (struct nodo *)malloc(sizeof(struct nodo));
    nuovo->info=numero;
    nuovo->succ=testa;
    testa=nuovo;
    }

    void pop(void)
    {
    struct nodo *p;
    if(pilavuota()==true)
    cout << "pila vuota";
    else
    {
    p=testa->succ;
    delete testa;
    testa=p;
    }
    }

    void stampa(void)
    {
    struct nodo *p;
    cout << endl;
    p=testa;
    while(p!=NULL)
    {
    cout << p->info << endl;
    p = p->succ;
    }
    }

    bool pilavuota(void)
    {
    if(testa == NULL)
    return true;
    else
    return false;
    }

  2. #2

    Re: [C++] Esercizio puntatori, invertire una pila (struttura dinamica)

    Allocare con "malloc" e liberare con "delete" alla lunga ti procurerà incredibili mal di testa.
    La regola è:
    - se allochi con "malloc" devi liberare con "free";
    - se allochi con "new" devi liberare con "delete".

  3. #3
    Ciao Red,

    qui:

    http://forum.html.it/forum/showthrea...readid=1170187

    trovi un esempio per scambiare due nodi di una lista. La funzione è "SwapNodes" e, nell'esempio, c'è la versione e per le liste semplici, e per le liste doppie.

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    2
    Grazie

  5. #5
    non c'è di che

    se vuoi, puoi scaricarti i sorgenti d qui:

    http://www.programmazione.it/index.p...m&idItem=37551

    è gratis, ma devi registrarti.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.