Perchè questo programma che ho fatto non mi stampa la lista ordinata. La push sembra fatta bene. Cioè se la lista è vuota inserisce in testa ovviamente, altrimenti scansiona la lista fino a trovare un elemento che è maggiore di quello inserito dopodichè crea il nuovo record il puntatore del precedente punta al nuovo record, e il puntatore succ del nuovo record si collega al successivo p->succ->succ. Il programma compila ma non esegue correttamente. Dov'è l'errore..?
File Lista.h
#ifndef LISTA_H
#define LISTA_H
struct Record
{
int elem;
Record *succ;
};
class Lista
{
private:
Record *testa;
public:
Lista() : testa(0) {}
~Lista();
void push (const int& el);
void pop();
bool vuota() const { return (testa == 0); }
void stampa() const;
};
#endif
FIle Lista.cpp
#include <iostream>
#include "Lista.h"
using namespace std;
Lista :: ~Lista()
{
Record *temp;
while (testa)
{
temp = testa;
testa = testa->succ;
delete temp;
}
}
void Lista :: push (const int& el)
{
if(vuota())
{
Record *re = new Record;
re->elem = el;
re->succ = testa;
testa = re;
}
else
{
Record *p = testa;
bool trovato = false;
while ((p->succ) && (!trovato))
{
if (p->succ->elem > el)
{
Record *re = new Record;
re->elem = el;
p->succ = re;
re->succ = p->succ->succ;
trovato = true;
}
}
}
}
void Lista :: pop()
{
if (vuota())
cout << "Pop non possibile. Lista vuota!\n";
else
{
Record *temp = testa;
testa = testa->succ;
delete temp;
}
}
void Lista :: stampa() const
{
if (vuota())
cout << "Lista vuota\n";
else
{
Record *temp = testa;
while (temp);
{
cout << temp->elem << " ";
temp = temp->succ;
}
}
}
FIle main.cpp
#include <iostream>
#include <cstdlib>
#include "Lista.h"
using namespace std;
int main ()
{
Lista l;
l.push(10);
l.push(8);
l.push(9);
l.stampa();
l.pop();
l.pop();
l.pop();
l.pop();
system ("pause");
return 0;
}