lista z dwoma polami w c++ nie dziala :(

0

pytanie proste dlaczego to nie dziala:
ta sama lista (ta sama impelentacja) ale tylko z jednym polem dziala idealnie:
prosze pomozcie :)

----------------CUT-------------------------------
#include <iostream>
#include <stdlib.h>

using namespace std;
int i,x,y,xt,yt;
class intlista {
public:
int xl,yl;
class intlista *next,*prev;
intlista(int ex, int ey, intlista *ptr=0) {
xl=ex;
yl=ey;
prev=next=ptr;
}
};

class lista {
public:
void add(int,int);
void del(intlista*);
void alg();
void print();
private:
intlista *head,*tail;
};

void lista::add(int x, int y)
{
if (tail!=0) {
tail->next=new intlista(x,y);
tail->next->prev=tail;
tail=tail->next;
}
else
{
head=tail=new intlista(x,y);
}
}

void lista::del(intlista *p)
{
intlista *tmp;
if (head==tail) {
head=tail=0;
}
else if (head==p) {
tmp=head;
head=head->next;
delete tmp;
}
else if (tail==p) {
tmp=tail;
tail=tail->prev;
tail->next=0;
delete tmp;
}
else
{
p->prev->next=p->next;
delete p;
}
}

void lista::alg()
{
intlista *p=head;
add(86,24);
add(23,185);
add(25,921);
add(921,42);
add(26,67);
del(p);
print();
}

void lista::print()
{
intlista *tmp;
for (tmp=head;tmp!=0;tmp=tmp->next)
cout << tmp->xl << " " << tmp->yl << endl;
}

int main()
{
lista *lista;
lista->alg();

return 0;
}
----------------CUT-------------------------------

// chcesz pomocy? To nie rob na złośc, użyj tagów cpp i sformatuj ten tekst porządnie [mf]

0

pytanie może i proste, ale napisz chociaż dlaczego nie działa - co to właściwie znaczy nie działa (wiesza się, nie kompiluje, itd.)

0

a tu troche zmodyfikowany przyklad, program z listy wyrzuca dwa elementy, ale zamiast powstac:
86,24
921,42
26,67

z

86,24
23,185
25,921
921,42
26,67

daje to wynik

86,24
4007104,921
921,42
26,67

przynajmniej umnie :)

#include <iostream>
#include <stdlib.h>

using namespace std;
int i,x,y,xt,yt;
class intlista {
public:
int xl,yl;
class intlista *next,*prev;
intlista(int ex, int ey, intlista *ptr=0) {
xl=ex;
yl=ey;
prev=next=ptr;
}
};

class lista {
public:
void add(int,int);
void del(intlista*);
void alg();
void print();
private:
intlista *head,*tail;
};

void lista::add(int x, int y)
{
if (tail!=0) {
tail->next=new intlista(x,y);
tail->next->prev=tail;
tail=tail->next;
}
else
{
head=tail=new intlista(x,y);
}
}

void lista::del(intlista *p)
{
intlista *tmp;
if (head==tail) {
head=tail=0;
}
else if (head==p) {
tmp=head;
head=head->next;
delete tmp;
}
else if (tail==p) {
tmp=tail;
tail=tail->prev;
tail->next=0;
delete tmp;
}
else
{
p->prev->next=p->next;
delete p;
}
}

void lista::alg()
{
intlista *p;
add(86,24);
add(23,185);
add(25,921);
add(921,42);
add(26,67);
p=head;
p=p->next;
del(p);
p=p->next;
del(p);
print();
}

void lista::print()
{
intlista *tmp;
for (tmp=head;tmp!=0;tmp=tmp->next)
cout << tmp->xl << " " << tmp->yl << endl;
}

int main()
{
lista *lista;
lista->alg();
system("PAUSE");
return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1