Sorry wenn ich diesen Thread nochmal pushe!
Ich hatte die letzen Tage keine zeit deshalb konnte ich mich nicht mehr mit beschäftigen hab jetzt zumindest einen Ansatz.
Also die Aufgabe ist es ein Array aus verkettetn listen zu erstellen:
Das Array besteht dann aus zwei listen eine mit vollen elementen und eine mit lerren elementen also sprich jedes Array element ist eine liste wenn es leer ist zeigt es auf das nächste leere Arrayelement
wenn nicht zeigt es auf das nächste besetzte Arrayelement wenn ein neues Listenelement angefordert wird muss dies aus einen leeren Arrayplatz geschehen. das heißt die Liste der Leeren Elemente wird
verkürzt wenn es neues Element angefordert wird bzw wird sie um eines erweitert wenn ein element wieder freigegeben wird.
|
C/C++ Quellcode
|
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
struct LE
{
float value;
struct LE* next;
LE(): value(0.0f), next(0) {}
};
class List
{
private:
LE* first;
LE* last;
LE* leArray;
unsigned leArraySize;
LE* firstEmpty; /*Zeiger auf das erste leere Element*/
LE* newLE( ) /*forder neues element an heißt es sucht leeres element und gibt zeiger auf dieses zurück */
{
LE* neu; /*neuer zeiger*/
if( firstEmpty->next != NULL ) /*wenn firstEmpty->next nicht null ist sind noch weiter leere elemente enthalten */
{
neu = firstEmpty; /*das erste leere element wird in den Zeiger neu geschoben*/
firstEmpty=firstEmpty->next; /*das nächste element auf das das erste leere element zeigt wird neues firstEmpty*/
return neu; /*leeres element wird zurück gegeben*/
}else
{
return NULL; /* wenn firstEmpty Null kein leeres element vorhanden return null*/
}
}
public:
LE* arr ;
List (unsigned size ) /*Konstruktor erstellt array mit list elementen "LE"*/
{
arr = new LE[size]; /*reserviere Speicher für array */
for (int i = 0; i<size; i++) /*Durchlaufe Array und initialsiere jedes mit einem LE */
{
arr[i]= /*wie kann ich initialsieieren*/ 0 ;
}
firstEmpty = arr[0]; // firstEmpty zeiger auf erstes arrayelement setzen
}
List(const List& source);
List(List&& source);
~List();
int append(float value);
void deleteLE(LE* old);
List& operator=(const List& source);
List& operator =(List&& source);
LE* getFirstEmpty()
{
return List::firstEmpty;
}
void setArraysize(int size)
{
List::leArraySize = size;
}
);
|
So von mir stammt die Funktion newLE() und der Konstruktor list der rest war vorgegeben allerdings habe ich jetzt ein paar fragen :
1. Wieso sagt er hier :
|
C/C++ Quellcode
|
1
|
if( firstEmpty->next != NULL )
|
bezeichenr NULL nicht definiert ?? Benutze Visual studio falls das euch was hilft.
als nächstes wie kann ich mein array nun mit LE element initialsieren
wenn ich das ganze so mache
|
C/C++ Quellcode
|
1
2
3
4
5
|
or (int i = 0; i<size; i++)
{
arr[i]= LE*neu ;
}
|
Wird mir geast der typname ist nicht zulässig warum ? es ist doch ein array vom typ LE also darf ich doch da auch solche elemente reinschreiben oder ?
Als nächstes ist die Frage ist es richtig wenn ich die private funktionen gleich oben deklarier wenn ich sie versuche nach der klasse zu deklarieren sagt er mir das es eine ungültige doppeldekleration ist außerdem versteh ich nicht ganz was ich mit den ganzen zeigen machen soll bzw warum diese private sind ? so komme ich doch ohne set und getter nicht mehr ran ?
Wäre cool wenn mal jemand drüber schaut und ein paar verbesserungsvorschläge und tipps gibt
Danke im vorraus
PS: Sorry für den langen post