[C++] Inizializzazione ed inserimento in una lista.

  • Autore discussione Autore discussione Mattia Campagna
  • Data d'inizio Data d'inizio
Pubblicità
M

Mattia Campagna

Ospite
Sia data la struttura seguente:

enum stato {L, O};
struct elem {stato s; elem* pun;};

Scrivere una funzione che, data una lista di elementi di tipo elem, elimina dalla lista tutti gli elementi il cui stato è L e restituisce il numero degli elementi eliminati.

Prima di creare tale funzione ho sto cercando di implementare la funzione che inizializza la lista vuota, la funzione per inserire gli elementi e quella per stamparli così da fare qualche prova.

Credo però di aver problemi sin dall’inizio dal momento che non ho mai trattato il tipo enumerazione ed in questo caso devo lavorare con degli oggetti di tipo “stato”.

Tenete di conto che ho cominciato da un mesetto a studiare il c++ ed ancora sono molto insicuro :S

Codice:
#include <iostream>
#include <cstdlib>
using namespace std;
 
enum stato {L, O};  
struct elem {stato s; elem* pun;};
struct lista {elem* p0;};// testa della lista
 
void inizializza(lista& L) {
     L.p0 = NULL;
}
 
void intesta(lista& p0, stato stat) {
     elem* p = new elem;
     p->s = stat; p-> pun = p0; p0 = p;
}
    
 
int main() {
    lista L0;
    inizializza(L0);
    void intesta(L0, ??) {
    system ("pause");
    return 0;
}
 
Sia data la struttura seguente:

enum stato {L, O};
struct elem {stato s; elem* pun;};

Scrivere una funzione che, data una lista di elementi di tipo elem, elimina dalla lista tutti gli elementi il cui stato è L e restituisce il numero degli elementi eliminati.

Prima di creare tale funzione ho sto cercando di implementare la funzione che inizializza la lista vuota, la funzione per inserire gli elementi e quella per stamparli così da fare qualche prova.


Codice:
#include <iostream>
#include <cstdlib>
using namespace std;
 
enum stato {L, O};  
struct elem {stato s; elem* pun;};
struct lista {elem* p0;};// testa della lista
 
void inizializza(lista& L) {
     L.p0 = NULL;
}
 
void intesta(lista& p0, stato stat) {
     elem* p = new elem;
     p->s = stat; p-> pun = p0; p0 = p;
}

Codice:
void intesta(lista& l, stato stat) 
{     
     elem* p = new elem;   
     p->s = stat;

  if(l.p0==NULL)//e' il primo della lista
  {
     p->pun=NULL;//il successivo dell'elemento e' null perche' non c'e' in quanto e' il primo della lista
     l.p0=p;//imposto il primi elemento a p
  }
  else
  { 
     p-> pun = l.po; //faccio puntare il successivo di p al primo della lista
     l.p0 = p;//poi imposto come primo della lista l'elemento p
   }
}

devi solo gestire che cosa succede quando la lista e' vuota..cioe' il nuovo elemento diventa il primo della lista..comunque un consiglio...usa nomi piu' significativi per le variabili perche' ti aiuta a capire meglio cosa stai facendo..io ora ho usato i tuoi stessi nomi per non sconvolgere il tuo ragionamento, ma rimane un consiglio per il futuro...invece di ''pun'' puoi usare ''next'', ''successivo'',''succ'', ecc. e invece di ''p0'' , ''first'', ''primo'', ecc..
 
Pubblicità
Pubblicità
Indietro
Top