Witam.
Mam stworzyć program działający jako podwójnie łączona lista.
Dzięki poradnikom napisałem program w 90%. Teraz jednak pojawia się problem.
Mianowicie przy wypisywaniu elementów z listy, tworzę tymczasowy węzeł który wskazuje na początek listy, jednak gdy chcę wskazać na następny wskazuje mi KONIEC tej listy.
Gdzie może być błąd?
#include <iostream>
using namespace std;
class zespolona{
int rzeczywista,urojona;
public:
zespolona():rzeczywista(0),urojona(0){}
zespolona(int a,int b):rzeczywista(a),urojona(b){}
friend ostream & operator<<(ostream &out,const zespolona & obj){
return out<<"Rzeczywsita "<<obj.rzeczywista<<" Urojona"<<obj.urojona<<" \n";
}
bool operator<(const zespolona& o){
return rzeczywista<o.rzeczywista;
}
bool operator>(const zespolona& o) const{
return rzeczywista<o.rzeczywista;
}
bool operator==(const zespolona& obj){
return (rzeczywista==obj.rzeczywista && urojona==obj.urojona);
}
};
struct node{
zespolona t;
node * next;
node * prev;
node():prev(NULL), next(NULL) {};
};
class lista{
protected:
node *head;
node *tail;
public:
friend node;
lista():head(NULL),tail(NULL) {}
bool empty() const { return head==NULL;}
lista & operator+=(const zespolona &obj){
if(empty()){
node* temp = new node;
head = temp;
tail = temp;
temp->prev = NULL;
temp->next = NULL;
temp->t = obj;
}else{
node* curr;
curr = head;
while( obj>curr->t && curr->next != tail->next) curr = curr->next;
if(curr == head){
node* temp = new node;
temp->t = obj;
temp->prev = curr;
temp->next = NULL;
head->next = temp;
tail = temp;
cout<<" Inserted "<<obj<<" After "<<curr->t<<endl;
}else{
if(curr == tail && obj>tail->t){
tail->next = new node;
(tail->next)->prev = tail;
tail = tail->next;
tail->next = NULL;
tail->t = obj;
cout<<" Added "<<obj<<" at the end "<<endl;
}else{
node* temp = new node;
temp->t = obj;
temp->next = curr;
(curr->prev)->next = temp;
temp->prev = curr->prev;
curr->prev = temp;
cout<<" Inserted "<<obj<<" Before "<<curr->t<<endl;
}
}
}
return *this;
}
friend ostream& operator<<(ostream& ostr, const lista& l ){
if(l.empty()){
ostr<<" The list is empty. "<<endl;
}else{
node *temp;
temp=l.head;
for(temp;temp!=l.tail;temp=temp->next){ //coś tutaj jest nie tak?
ostr<<temp->t;
temp=temp->next;
}
return ostr;
}
}
~lista(){
while(head){
const node *element=head;
head=head->next;
delete element;
}
}
};
int main(){
lista q1;
q1 += zespolona(1, 4);
q1 += zespolona(2, 11);
q1 += zespolona(3, 11);
q1 += zespolona(4, 11);
q1 += zespolona(5, 4);
q1 += zespolona(6, 11);
q1 += zespolona(7, 11);
q1 += zespolona(8, 11);
cout<<q1;
return EXIT_SUCCESS;
}