linked list
er igen med at lave en linked list. det virker sådan set fint bortset fra min sorterings algoritme. den får byttet rundt på nogle tal, men af en eller anden grund går der også nogle tal tabt.nogen der har nogle gode ideer?
----> koden <----
#include \"stdafx.h\"
typedef int type;
class item {
public:
int value;
item *next;
item *prev;
item(type v) {
next=NULL;
prev=NULL;
value=v;
}
};
class list {
public:
item *i;
list() {
i=NULL;
}
~list() {
item *p=i;
while(p) {
if (p!=NULL) {
item *tmp=p;
p=p->next;
delete tmp;
}
}
};
void add_item(int v) {
if (v!=NULL) {
item *p = new item(v);
if (i==NULL) {
i=p;
} else {
p->next=i;
i->prev=p;
i=p;
}
}
}
void del_item(int v) {
item *p=i;
while(p) {
if (p->value==v) {
if (p->next!=NULL) {
p->next->prev=p->prev;
p->prev->next=p->next;
break;
}
}
p=p->next;
}
}
void sort() {
bool br=true;
item *p=i;
while (p) {
if (p->next!=NULL) {
if ( (p->value < p->next->value) ) {
swap(p,p->next);
br=false;
}
}
p=p->next;
}
if (!br) { sort(); }
}
void swap(item *b, item *c) {
if(b->prev==NULL) {
i=c;
b->next=c->next;
c->next->prev=b;
c->next=b;
b->prev=c;
c->prev=NULL;
} else if (c->next==NULL) {
if (i==b) i=c;
b->next=c->next;
c->next=b;
c->prev=b->prev;
b->prev=c;
b->prev->next=c;
} else {
item *tmp=b->prev;
// item *tmp2=c->next;
b->prev->next=c;
c->next->prev=b;
b->prev=c;
b->next=c->next;
c->next=b;
c->prev=tmp;
}
}
};
void main(int argc, char* argv[]) {
list *l = new list();
l->add_item(3);
l->add_item(5);
l->add_item(2);
l->add_item(4);
l->add_item(7);
l->add_item(72);
l->add_item(4);
l->add_item(1);
item *p=l->i;
while(p) {
printf(\"\\n * %d\",p->value);
p=p->next;
}
printf(\"\\n\");
l->sort();
p=l->i;
while(p) {
printf(\"\\n * %d\",p->value);
p=p->next;
}
printf(\"\\n\");
delete l;
};
----> koden <----
håber nogen kan hjælpe.
