Gå til innhold

Lenka liste i klasser


Anbefalte innlegg

Videoannonse
Annonse

Problemet er at jeg ikke vet hva jeg skal gjøre:

Skal prøve å lese inn en og en x av typen int.

 

Men som dere kanskje ser er jeg ganske lost.

 

"Node.h"

#pragma once

class Node
{
public:
int x;
Node(int);
~Node(void);
private:
Node *NextNode;
};

 

Node.cpp

#include "Node.h"

Node::Node(int x)
{
this->x = x;
}

Node::~Node(void)
{
}

 

main.cpp

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

void main(void)
{
int input = 0;
int Ant = 0;

 while(true)                               
 {                                             
//Her skal jeg vel da opprette en node??    
  
cout << "Starter innlesing X" << (Ant+1) << endl;                      
   cin >> input;     

   Ant++;                                        
 }                 

}

Lenke til kommentar

Er det noe slik du prøver å lage, jeg har ikke prøvd det ut, men det burde fungere :).

Koden er sikkert ikke den beste, men det er jo ganske seint på natta så..

 

Et lite tips, hvis du er helt lost burde du heller prøve noe enklere eller så kan du bare bruke std::list (#include <list>)

 

#include "Node.h"

int main
{
Node	BaseNode;//Base noden som skal være starten på listen

Node*	pLastNode = &BaseNode;//peker til den forige noden(skal holde styr på hvor vi er i listen)
for(int i = 0; i < 100; i++)
{
 // her kan man lese inn x eller bare bruke i som jeg har
 Node* CurrentNode = new Node(i); //allokerer en nye Node dynamisk 
 pLastNode->NextNode  = CurrentNode; //legger til CurrentNode son et ledd i linked list til pLastNode
 pLastNode = CurrentNode;// setter den nye Noden(CurrentNode) som pLastNode.
}
// delete på alle nodene hvis ikke har man en memory leak
}

Lenke til kommentar

En linket liste er rett og slett en struktur som inneholder en verdi, og en peker, slik som du har laget:

 

struct Node {
int value;
Node* next;
};

 

first.value = 10;
first.next = &second;

second.value = 11;
second.next = &third;

third.value = 12;
third.next = 0;

 

Denne teknikken kan du da implementere i en klasse:

class LinkedList {
public:
   void push(int);
   //....
private:
   Node* head;
};

 

Dette bør være nok til å få deg på rett kjøl. :)

Ellers kan du alltids google for å se et litt mer komplett eksempel, heh.

Endret av zirener
Lenke til kommentar
men jeg har jo konstruktøren min i Node.cpp

 

EDIT: Skal ikke det holde?

7025912[/snapback]

 

#include <iostream>

class Blah1 {
public:
};


class Blah2 {
public:
 Blah2(int i){
 }
};


int main(int argc, char* argv[], char* env[]){
 Blah1 blah1; // ok
 Blah2 blah2; // ikke ok
 return 0;}

Lenke til kommentar

Grunnen til at det ikke er ok er naturligvis fordi Node-en din krever en int som argument, men får ingen. Det du da kan gjøre er f.eks. å bruke et default argument/parameter, slik:

 

class Node {
public:
    Node(int x = 0) { /* ... */ }
};

 

Da kan Node-en konstrueres på følgende måter:

Node n;    // Gir en node hvor x-en er 0
Node n(5); // Gir en node hvor x-en er 5

Lenke til kommentar

da har jeg lært meg litt til.... takker så mye!!

 

MEN det er en ting som jeg ikke helt er med på. Når jeg skal skrive ut denne listen jeg har laget så går det galt. Tror ikke jeg får valgt riktig X.

 

EDIT: Se nederst i koden!

 

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

int main()
{
int input = 0;
int Ant = 0;

Node BaseNode(input);    	//Base noden som skal være starten på listen

Node* pLastNode = &BaseNode;  	//peker til den forrige noden(skal holde styr på hvor vi er i listen)

do
{
 cout << "Skriv inn x nr:" << (Ant + 1)<< " "; 
 cin >> input;      // her skal man lese inn x eller bare bruke i som jeg har
 
 Ant++;

 Node* CurrentNode = new Node(input);//allokerer en nye Node dynamisk 
 pLastNode->NextNode  = CurrentNode;	//legger til CurrentNode son et ledd i linked list til pLastNode
 pLastNode = CurrentNode;  	// setter den nye Noden(CurrentNode) som pLastNode.

}while(Ant < 15);

/*	while(Ant >= 0)
{
 Her blir den en enkel cout setning, men hvordan velger jeg x i nodene?
 hvordan velger jeg den neste noden?
}; */
         	// delete på alle nodene hvis ikke har man en memory leak
}

Endret av Grimnar_
Lenke til kommentar

Mulig du har endre litt på Node klassen, men NextNode kan ikke være private slik du bruker den.

 

Skjult tekst: (Marker innholdet i feltet for å se teksten):

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

int main()
{
int input = 0;
int Ant = 0;

Node BaseNode(input);     //Base noden som skal være starten på listen

Node* pLastNode = &BaseNode;   //peker til den forrige noden(skal holde styr på hvor vi er i listen)

do
{
cout << "Skriv inn x nr:" << (Ant + 1)<< " "; 
cin >> input;      // her skal man lese inn x eller bare bruke i som jeg har

Ant++;

Node* CurrentNode = new Node(input);//allokerer en nye Node dynamisk 
pLastNode->NextNode  = CurrentNode; //legger til CurrentNode son et ledd i linked list til pLastNode
pLastNode = CurrentNode;   // setter den nye Noden(CurrentNode) som pLastNode.

}while(Ant < 15);

///////// Har bare gjort endringer på koden under her
pLastNode = &BaseNode;   //peker til den forrige noden(skal holde styr på hvor vi er i listen)

while(Ant >= 0)
{
cout << pLastNode->x;
pLastNode = pLastNode->NextNode;
Ant--; // teller ned
//Her blir den en enkel cout setning, men hvordan velger jeg x i nodene?
//hvordan velger jeg den neste noden?
}; 
         // delete på alle nodene hvis ikke har man en memory leak
}

 

Jeg har desverre ikke tid til å komentere koden, men det finner du nok ut av.

 

Lykke til.

Lenke til kommentar
da fatter jeg... glemte å sette

pLastNode = &BaseNode; noe som sier at pLastNode blir adressen til BaseNode ikkesant!?!

7042544[/snapback]

 

Stemmer det.

 

For å bla deg gjennom den lenka listen så kan du bare gå framover(det hadde muligens være kjekt med en mulighet til å gå bakover)

Derfor må du starte på det eneste punktet som du vet er starten på listen nemlig BaseNode.

Lenke til kommentar
da fatter jeg... glemte å sette

pLastNode = &BaseNode; noe som sier at pLastNode blir adressen til BaseNode ikkesant!?!

7042544[/snapback]

..

For å bla deg gjennom den lenka listen så kan du bare gå framover(det hadde muligens være kjekt med en mulighet til å gå bakover)

..

7045661[/snapback]

 

class Node {
public:
 ...
private:
 Node* next_node;
 Node* prev_node; // "gå bakover"
};

 

http://en.wikipedia.org/wiki/Linked_list#Doubly-linked_list

Endret av lnostdal
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...