Avatar billede ahara Nybegynder
30. august 2006 - 22:49 Der er 5 kommentarer

Linked List

Hej

Sidder og roder lidt med en hægtet liste for at øve mig og komme ind i c++ igen.

Jeg kan godt få oprettet noder og det virker som om de hægtes sammen men mit program går ned når jeg kører funktionen printList(). Nogen der kan hjælpe.

P.S. Ved godt at koden er lidt rodet og kan optimeres.

Tak
AHR

//List.cpp fil

#include "stdafx.h"
#include "List.h"

List::List(Node* node_x)
{
    node = node_x;
}

void List::printList()
{
    Node *myNode = node;

    while(myNode->getPrevious() != NULL)
    {
        cout<<myNode->getArtist();
        myNode = myNode->getPrevious();
    }
}

//List.h fil

#ifndef List_H
#define List_H

#include "Node.h"

class List
{
private:
    Node *node;

public:
    List(Node* node_x);

    void printList();
};

#endif

//Node.cpp fil

#include "stdafx.h"
#include "Node.h"
#include <string>
#include <iostream>
using namespace std;

Node::Node(string artist_x)
{
    artist = artist_x;
}   

string Node::getArtist()
{return artist;}

void Node::setPrevious(Node *previous)
{previous = previous;}

void Node::setNext(Node *next)
{next = next;}

Node* Node::getPrevious()
{return previous;}

Node* Node::getNext()
{return next;}

//Node.h fil

#ifndef Node_H
#define Node_H

#include <string>
#include <iostream>
using namespace std;

class Node
{
private:
    Node *previous;
    Node *next;
    string artist;

public:
    Node(string artist_x);
   
    string getArtist();

    void setPrevious(Node *previous);

    void setNext(Node *next);

    Node* getPrevious();

    Node* getNext();
};

#endif

//Main fil

#include "stdafx.h"
#include "Node.h"
#include "List.h"
#include <string>
#include <iostream>
using namespace std;

int main()
{
    string stop = "x";
    string artist;
    List *myList;
    Node *prev;
    Node *newNode;
    static bool first = true;

    while(stop != "n")
    {
        cout<<"Write artist\n";
        getline(cin,artist);
        newNode = new Node(artist);

        if(first ==  true)
        {
            newNode->setPrevious(NULL);
            first = false;
        }
        else
        {
            newNode->setPrevious(prev);
            prev->setNext(newNode);
        }

        prev = newNode;
        cout<<"\nContinue?";
        getline(cin,stop);
    }

    myList = new List(newNode);
    myList->printList();

    return 0;
}
Avatar billede bertelbrander Novice
31. august 2006 - 00:10 #1
Der er noget galt i bl.a:
void Node::setNext(Node *next)
{next = next;}

next = next;
er et tomt statement, du skal kalde de to ting for noget forskelligt.
Avatar billede arne_v Ekspert
31. august 2006 - 04:07 #2
eller bare

this->next = next;

den er jo nærmest idiomatisk i andre sprog
Avatar billede mollevp Nybegynder
31. august 2006 - 17:39 #3
void List::printList()
{
    Node *myNode = node;

    while(myNode->getPrevious() != NULL)
    {
        cout<<myNode->getArtist();
        myNode = myNode->getPrevious();
    }
}

skal nok være:

void List::printList()
{
    Node *myNode = node;

    while(myNode->getPrevious() != NULL)
    {
        cout<<myNode->getArtist();
    }
}

Ellers kan du vist nemt løbe ind i problemer, hvis nr. 2 af dine getPrevious() returnere 0.

En lille side bemærkning ang. brugen af NULL:

"Because of C++'s tighter type checking, the use of plain 0, rather than any suggested NULL macro, leads to fewer problems. If you feel you must define NULL, use const int NULL=0" B.Stroustrup
Avatar billede ahara Nybegynder
12. september 2006 - 19:39 #4
Virker. Tak. Svar og der er point
Avatar billede mollevp Nybegynder
12. september 2006 - 22:01 #5
Mig?
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