Ragazzi sto provando ad implementare una lista a puntatori
prima avevo provato a fare inserire all'utente quanti nodi voleva, e poi con un for sulla procedura push inerivo gli elementi e con un for sulla procedura pop me li stampavo , e funzionava, poi però ho pensato che si perdeva l'utilità della lista facendo decidere a priori il numero dei nodi, quindi ho implementato il main con un
while(continua)
inserisci nuovi nodi (push) e incrementa le iterazioni
e con un for(int i=0;i<iterazioni;i++)
stampa i nodi (pop)
ma mi stampa solo l'ultimo nodo
vi passo i file :Main
#include "lista1.h"
using namespace std;
// Prototipi di funzioni definite in questo modulo
void inserimentointesta(L& l);
void estrazioneintesta(L& l);
int main() {
bool continua=true;
L l;
int scelta,iterazioni=0;
cout<<"\n Menu \n";
while(continua){
continua=false;
//definisce variabile di tipo lista
start(l); // inizializza la lista
inserimentointesta(l);
cout<<"\nVuoi inserire un altro elemento ?\n";
cin>>scelta;
if(scelta==1)
continua=true;
iterazioni++;
}
cout<<"Estrazione di elementi dalla testa\n ";
for(int i=0;i<iterazioni;i++)
estrazioneintesta(l);
}
void inserimentointesta (L& l) {
E e ;
cout<<"\n Inserimento di un elemento in testa\n ";
cout<<"elemento = "; cin>>e;
if (!full(l)) push(l,e);
else cout<<"\n Lista piena\n ";
}
void estrazioneintesta(L& l) {
E e;
if (!empty(l)) {
pop(l,e);
cout<<"\nelemento = "<<e;
}
else cout<<"Lista vuota estrazione impossibile\n ";
}
func.cpp
#include "lista1.h"
void start(L& l) {
l=0;
}
bool empty(const L& l) {
return (l==0);
}
bool full(const L& l) {
return false;
}
void push(L& l,const E & e) {
L q=new Record; //alloca spazio
q->elem=e; //vi pone e
q->punt=l; //lega al resto della lista
l=q; //lo mette in testa alla lista
}
void pop(L& l,E& e) { //oppure: bool pop(L& l,E& e)
e=l->elem; // copia in e il primo elemento
L p=l; // salva il valore di l
l=l->punt; //aggiorna l
delete p; // dealloca il primo elemento
}
func.h
#ifndef _LISTA_H_ // Compilazione condizionale
#define _LISTA_H_
#include <iostream>
using namespace std;
typedef int E; // Def. del tipo di el. della lista
struct Record; // Predichiarazione
typedef Record* L; // Def. del tipo puntatore a Record
struct Record { // Tipo record costituito da
E elem; // campo informazione
L punt; // campo puntatore al prossimo nodo della lista
};
void start(L& l); // Inizializza la lista
bool empty(const L& l); // Test di lista vuota
bool full(const L& l); // Test di lista piena
void push(L& l, const E & e); // Inserimento in testa
void pop(L& l, E& e); // Cancellazione in testa, restituisce l'elemento cancellato
#endif