das ist es ja.. ich lösche die struktur nicht nur.. ich setze sie auch auf NULL ... aber wenn ich dann eine andere funktion aufrufe die mir alle elemente wiedergeben soll, dann startet diese bei der ersten struktur und geht mir alle durch und gibt sie aus.. naja ich denke ich poste etwas code.. warscheinlich hab ich ganz einfach was falsch verstanden
ich muss dazu sagen dass ich die verkettete liste ohne hilfe bis jetzt geschrieben habe.. also ohne beispiele ausn internet oder so.. also werden da vllt. einige dinge drinnen sein, die man warscheinlich anders viel leichter lösen könnte.. ich wollte es einfach mal auf "just do it yourself" versuchen..
das ist mal das was ich in der main aufrufe ..
der constructor von ChainedList macht eigentlich nur eines.. er setzt die pointervariable die später auf das erste objekt in der liste zeigt auf NULL
m_pPtrToFirstElement = NULL;
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
// M a i n
int main()
{
ChainedList *pList;
pList = new ChainedList;
pList->Add(0);
pList->Add(1);
pList->Add(2);
pList->Add(3);
pList->ShowList(); // Zeigt alles an ..
pList->DeleteList();
pList->ShowList(); // Zeigt ebenfalls alles an ..
getchar();
PTR_DELETE(pList);
getchar();
return 0;
} // main()
|
die funktion Add(); funktioniert eigentlich.. später will ich sie umschreiben, sodass ich die elemente auch in der mitte der liste bzw. irgendwo in der liste einfügen kann.. vorerst reicht es mir wenn ich die elemente in einer reihe hinzufügen kann..
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
unsigned long ChainedList::Add(int Value)
{
// If there is no element at all:
if (m_pPtrToFirstElement == NULL)
{
Element *pAddElement;
pAddElement = new Element;
pAddElement->m_ListNr = 0;
pAddElement->m_Value = Value;
pAddElement->m_pPrevElement = NULL;
pAddElement->m_pNextElement = NULL;
m_pPtrToFirstElement = pAddElement;
m_pPtrToLastElement = m_pPtrToFirstElement;
return 0;
}
Element *pCurElement;
pCurElement = new Element;
Element *pAddElement;
pAddElement = new Element;
pCurElement = m_pPtrToFirstElement;
while(pCurElement != NULL)
{
if((pCurElement->m_pNextElement) == NULL)
{
pAddElement->m_ListNr = pCurElement->m_ListNr + 1;
pAddElement->m_Value = Value;
// Chain the elements ..
pAddElement->m_pNextElement = NULL;
pAddElement->m_pPrevElement = pCurElement;
pCurElement->m_pNextElement = pAddElement;
m_pPtrToLastElement = pAddElement;
return 0;
} // while(pCurElement != NULL)
pCurElement = pCurElement->m_pNextElement;
}
return 0;
} // Add()
|
ShowList(); nimmt einfach nur m_pPtrToFirstElement(); und gibt alle elemente mittels einer while schleife aus..
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
unsigned long ChainedList::ShowList(void)
{
Element *pCurElement;
pCurElement = new Element;
if((pCurElement = m_pPtrToFirstElement) == NULL)
{ return 0; }
while(pCurElement != NULL)
{
cout << "Element Nr. " << pCurElement->m_ListNr << endl;
cout << "Wert: "<< pCurElement->m_Value << endl << endl;
pCurElement = pCurElement->m_pNextElement;
} // while(pCurElement != NULL)
PTR_DELETE(pCurElement);
return 0;
} // ShowList()
|
tja und zu guter letzt kommt eben die eine funktion die nicht funktioniert
ich glaube ich hab einfach nen komplett falschen denkansatz bei der funktion .. nur zur info: den pointer m_pPtrToFirstElement lasse ich am leben, damit ich eben danach nochmal die funktion ShowElements(); aufrufen kann, um zu testen ob alles funktioniert hat.. aber naja.. tut es eben nicht
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
unsigned long ChainedList::DeleteList(void)
{
Element *pDeleteMe;
pDeleteMe = new Element;
pDeleteMe = m_pPtrToFirstElement;
Element *pDummy;
pDummy = new Element;
while(pDeleteMe != NULL)
{
pDummy = pDeleteMe->m_pNextElement;
if(pDummy != NULL)
{
pDummy->m_pPrevElement = NULL;
PTR_DELETE(pDeleteMe);
pDeleteMe = new Element;
pDeleteMe = pDummy;
}
else
{
PTR_DELETE(pDeleteMe);
}
} // while(pDeleteMe != NULL)
PTR_DELETE(pDummy);
return 0;
} // DeleteList()
|
edit:
hier noch die template funktion PTR_DELETE();
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
|
template<class T>
void PTR_DELETE(T &pPtr)
{
if(pPtr != NULL)
{
pPtr = NULL;
delete pPtr;
}
} // PTR_DELETE()
|