Hallo,
mijn vraag is hoe ik bij onderstaande lijst het gecodeerd krijg dat ik via "staart" achteraan ook cijfers kan toevoegen? Via de kop werkt het maar via de staart niet, wat doe ik hier verkeerd ?
// Gunther Leijs
// Week 47 Oefening 2
// Zie boek p. 381 voorbeeld 12.9
//
// Pas het voorbeeld aan zodat de nodes ook achteraan kunnen
// worden toegevoegd. De koppeling moet slechts in één richting
// worden bijgehouden.
#include <iostream>
#include <string>
using namespace std;
class IntNode
{
private:
int x;
IntNode *p;
IntNode *q;
public:
// Constructor
IntNode(int n = 0, IntNode *volgende = NULL)
: x(n), p(volgende), q(volgende)
{
}
// Get-functies
int &getInt()
{
return x;
}
IntNode *&getVolgende()
{
return p;
}
};
class LijstIterator
{
private:
IntNode *wijzer;
public:
LijstIterator(IntNode *init = NULL)
: wijzer(init)
{
}
int &operator*()
{
return wijzer -> getInt();
}
LijstIterator &operator++()
{
wijzer = wijzer -> getVolgende();
return *this;
}
bool operator != (LijstIterator Liter)
{
return wijzer != Liter.wijzer;
}
};
class Lijst
{
private:
IntNode *kop;
IntNode *staart;
public:
// typedef
typedef LijstIterator iterator;
// constructor
Lijst()
: kop(NULL), staart(kop)
{
}
// destructor
~Lijst()
{
IntNode *wijzer = kop, *pVolgende;
while(wijzer != NULL)
{
pVolgende = wijzer -> getVolgende();
delete wijzer;
wijzer = pVolgende;
}
}
void voegtoekop(int x)
{
kop = new IntNode(x, kop);
}
void voegtoestaart(int x)
{
staart = new IntNode(x, staart);
}
iterator begin()
{
return iterator(kop);
}
iterator end()
{
return iterator();
}
};
int main()
{
Lijst lijst;
lijst.voegtoekop(1);
lijst.voegtoekop(2);
lijst.voegtoekop(3);
lijst.voegtoestaart(4);
Lijst::iterator pos, begin = lijst.begin(), einde = lijst.end();
for(pos = begin; pos != einde; ++pos)
{
cout << *pos << endl;
}
return 0;
}
mijn vraag is hoe ik bij onderstaande lijst het gecodeerd krijg dat ik via "staart" achteraan ook cijfers kan toevoegen? Via de kop werkt het maar via de staart niet, wat doe ik hier verkeerd ?
// Gunther Leijs
// Week 47 Oefening 2
// Zie boek p. 381 voorbeeld 12.9
//
// Pas het voorbeeld aan zodat de nodes ook achteraan kunnen
// worden toegevoegd. De koppeling moet slechts in één richting
// worden bijgehouden.
#include <iostream>
#include <string>
using namespace std;
class IntNode
{
private:
int x;
IntNode *p;
IntNode *q;
public:
// Constructor
IntNode(int n = 0, IntNode *volgende = NULL)
: x(n), p(volgende), q(volgende)
{
}
// Get-functies
int &getInt()
{
return x;
}
IntNode *&getVolgende()
{
return p;
}
};
class LijstIterator
{
private:
IntNode *wijzer;
public:
LijstIterator(IntNode *init = NULL)
: wijzer(init)
{
}
int &operator*()
{
return wijzer -> getInt();
}
LijstIterator &operator++()
{
wijzer = wijzer -> getVolgende();
return *this;
}
bool operator != (LijstIterator Liter)
{
return wijzer != Liter.wijzer;
}
};
class Lijst
{
private:
IntNode *kop;
IntNode *staart;
public:
// typedef
typedef LijstIterator iterator;
// constructor
Lijst()
: kop(NULL), staart(kop)
{
}
// destructor
~Lijst()
{
IntNode *wijzer = kop, *pVolgende;
while(wijzer != NULL)
{
pVolgende = wijzer -> getVolgende();
delete wijzer;
wijzer = pVolgende;
}
}
void voegtoekop(int x)
{
kop = new IntNode(x, kop);
}
void voegtoestaart(int x)
{
staart = new IntNode(x, staart);
}
iterator begin()
{
return iterator(kop);
}
iterator end()
{
return iterator();
}
};
int main()
{
Lijst lijst;
lijst.voegtoekop(1);
lijst.voegtoekop(2);
lijst.voegtoekop(3);
lijst.voegtoestaart(4);
Lijst::iterator pos, begin = lijst.begin(), einde = lijst.end();
for(pos = begin; pos != einde; ++pos)
{
cout << *pos << endl;
}
return 0;
}