Avatar billede neuro Nybegynder
29. oktober 2001 - 15:11 Der er 1 løsning

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.
Avatar billede neuro Nybegynder
29. oktober 2001 - 15:39 #1
har fundet problemet
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester