Files
uni/ws2019/ipi/uebungen/cpp_headers/LFA.cc
T

105 lines
1.9 KiB
C++

class ListFloatArray :
public FloatArray { // Ableitung
public:
ListFloatArray (); // leeres Feld
~ListFloatArray(); // ersetzt ~FloatArray
virtual float& operator[](int i);
virtual int numIndices ();
virtual int minIndex ();
virtual int maxIndex ();
virtual bool isMember (int i);
private:
struct FloatListElem { // lokale Struktur
FloatListElem *next;
int index;
float value;
};
FloatListElem* insert (int i, float v);
FloatListElem* find (int i);
int n; // Anzahl Elemente
FloatListElem *p;// Listenanfang
} ;
// private Hilfsfunktionen
ListFloatArray::FloatListElem*
ListFloatArray::insert (int i, float v)
{
FloatListElem* q = new FloatListElem;
q->index = i;
q->value = v;
q->next = p;
p = q;
n = n+1;
return q;
}
ListFloatArray::FloatListElem*
ListFloatArray::find (int i)
{
for (FloatListElem* q=p; q!=0; q = q->next)
if (q->index==i)
return q;
return 0;
}
// Konstruktor
ListFloatArray::ListFloatArray ()
{
n = 0; // alles leer
p = 0;
}
// Destruktor
ListFloatArray::~ListFloatArray ()
{
FloatListElem* q;
while (p!=0)
{
q = p; // q ist erstes
p = q->next; // entferne q aus Liste
delete q;
}
}
float& ListFloatArray::operator[] (int i)
{
FloatListElem* r=find(i);
if (r==0)
r=insert(i,0.0); // index einfuegen
return r->value;
}
int ListFloatArray::numIndices ()
{
return n;
}
int ListFloatArray::minIndex ()
{
if (p==0) return 0;
int min=p->index;
for (FloatListElem* q=p->next;
q!=0; q = q->next)
if (q->index<min) min=q->index;
return min;
}
int ListFloatArray::maxIndex ()
{
if (p==0) return 0;
int max=p->index;
for (FloatListElem* q=p->next;
q!=0; q = q->next)
if (q->index>max) max=q->index;
return max;
}
bool ListFloatArray::isMember (int i) {
return (find(i)!=0);
}