Salve ragazzi come già ho scritto in un altro post sto cercando di finire un esercizio che dice di implementare una funzione sort che ordini una lista di interi.
Io ho rifatto per l'ennesima volta il codice ma niente non mi funziona
ho usato il metodo bubblesort e per scambiare gli elementi di una lista ho usato i puntatori ai nodi.
ecco il codice
#include <iostream>
#include <cassert>
using namespace std;
class Node;
class List;
class Iterator
{public:
Iterator();
int get() const;
Iterator next()const;
Iterator previous()const;
bool equals(Iterator b) const;
bool is_null() const;
private:
Node* position;
friend class List;
};
class List
{public:
List();
void push_back(int s);
void insert(Iterator p, int s);
void erase(Iterator p);
bool empty() const;
Iterator begin();
Iterator end();
void sort(List l);
private:
Node* first;
Node* last;
};
class Node
{public:
Node(int s);
private:
int data;
Node* prec;
Node* succ;
friend class List;
friend class Iterator;
};
Node::Node(int s)
{data = s;
prec = NULL;
succ = NULL;
}
Iterator::Iterator()
{position = NULL;
}
int Iterator::get() const
{
assert(position != NULL);
return position->data;
}
bool Iterator::equals(Iterator b) const
{
return position == b.position;
}
Iterator Iterator::next() const
{
assert(position != NULL);
Iterator t;
t.position = position->succ;
return t;
}
Iterator Iterator::previous() const
{
assert(position != NULL);
Iterator t;
t.position = position->prec;
return t;
}
bool Iterator::is_null() const
{return position==NULL;
}
List::List()
{first = NULL;
last = NULL;
}
bool List::empty() const
{ return first==NULL; }
Iterator List::begin()
{Iterator i;
i.position = first;
return i;
}
Iterator List::end()
{Iterator i;
i.position = last;
return i;
}
void List::push_back(int s)
{Node* n = new Node(s);
if (last == NULL)
{first = n;
last = n;
}
else {n->prec = last;
last->succ = n;
last= n;
}
}
void List::insert(Iterator p, int s)
{if (empty())
push_back(s);
else {Node* n = new Node(s);
Node* dopo = p.position;
Node* prima = dopo->prec;
n->prec = prima;
n->succ = dopo;
dopo->prec = n;
if (prima==NULL)
first = n;
else prima->succ = n;
}
}
void List::erase(Iterator p)
{assert (p.position != NULL);
Node* rimuovi = p.position;
Node* dopo = rimuovi->succ;
Node* prima = rimuovi->prec;
if (prima==NULL)
first = dopo;
else prima->succ = dopo;
if (rimuovi==last)
last = prima;
else dopo->prec = prima;
delete rimuovi;
}
void List::sort(List l)
{
Node* i;
bool swapped;
Node* temp;
do{
swapped=false;
for(i=first;i!=last;i=i->succ)
if((i->data)>((i->succ)->data))
{
temp=i;
i=i->succ;
i->succ=temp;
swapped=true;
}
}while(swapped);
Iterator p;
for(p=l.begin();!p.is_null();p=p.next())
cout<<p.get()<<" ";
}
int main()
{
List L;
L.push_back(10);
L.push_back(3);
L.push_back(5);
L.push_back(67);
L.push_back(89);
L.push_back(1);
L.push_back(100);
L.push_back(34);
L.push_back(3);
L.push_back(6);
L.push_back(21);
L.sort(L);
return 0;
}
provate anche a compilarlo così vedrete se con qualche piccola modifica a voi funzioni o no