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->indexindex; 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); }