[CODE]
// LISTA.CPP : Implementazione dinamica della struttura lista con
// libreria di funzioni. File di IMPLEMENTAZIONE
#include "lista1.h"
#include <iostream>
using namespace std;
//------------------------------------------------------------
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
}
//------------------------------------------------------------
// insert versione iterativa
void insert(L& l,const E & e) {
if(l==0 || l->elem>e) push(l,e); //l'elemento va inserito in testa
else { //l'elemento va inserito al centro o in coda
L prec=l, succ;
//alloca ed inizializza il nuovo elemento
L q=new Record;
q->elem=e;
q->punt=0;
while(prec->punt && prec->punt->elem<e ) prec=prec->punt; //determina prec
succ=prec->punt; //determina succ, se l'inserimento è in coda succ deve valere 0
// collega il nuovo elemento al resto della lista (anche in coda se è il caso)
q->punt=succ;
prec->punt=q;
}
//------------------------------------------------------------
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
}
//------------------------------------------------------------
// lastpop versione iterativa
void lastpop(L& l,E& e) { //oppure: bool lastpop(L& l,E& e)
if(l->punt==0) pop(l,e);
else {
L temp=l;
while(temp->punt->punt) temp=temp->punt; //scorre la lista, si ferma sul penultimo elemento
e=temp->punt->elem; // copia in e l'ultimo elemento
L p=temp->punt; // salva l'indirizzo dell'ultimo elemento
temp->punt=0; // "stacca" l'ultimo elemento dalla lista
delete p; // dealloca l'ultimo elemento
}
}
//------------------------------------------------------------
// inlist: ricerca sequenziale versione iterativa
bool inlist(const L& l,const E & e) {
L temp=l;
bool trovato=false;
while (temp && !trovato) {
if (e==temp->elem) trovato=true;
else
temp=temp->punt;
}
return trovato;
}
//------------------------------------------------------------
// stampa versione iterativa
void print(const L & l) {
L temp=l;
while(temp) {
cout << temp->elem;
cout << "\t";
temp=temp->punt;
}
}
[/CODE]