Für Vorlesungen, bitte die Webseite verwenden. https://flavigny.de/lecture
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

105 行
1.9KB

  1. class ListFloatArray :
  2. public FloatArray { // Ableitung
  3. public:
  4. ListFloatArray (); // leeres Feld
  5. ~ListFloatArray(); // ersetzt ~FloatArray
  6. virtual float& operator[](int i);
  7. virtual int numIndices ();
  8. virtual int minIndex ();
  9. virtual int maxIndex ();
  10. virtual bool isMember (int i);
  11. private:
  12. struct FloatListElem { // lokale Struktur
  13. FloatListElem *next;
  14. int index;
  15. float value;
  16. };
  17. FloatListElem* insert (int i, float v);
  18. FloatListElem* find (int i);
  19. int n; // Anzahl Elemente
  20. FloatListElem *p;// Listenanfang
  21. } ;
  22. // private Hilfsfunktionen
  23. ListFloatArray::FloatListElem*
  24. ListFloatArray::insert (int i, float v)
  25. {
  26. FloatListElem* q = new FloatListElem;
  27. q->index = i;
  28. q->value = v;
  29. q->next = p;
  30. p = q;
  31. n = n+1;
  32. return q;
  33. }
  34. ListFloatArray::FloatListElem*
  35. ListFloatArray::find (int i)
  36. {
  37. for (FloatListElem* q=p; q!=0; q = q->next)
  38. if (q->index==i)
  39. return q;
  40. return 0;
  41. }
  42. // Konstruktor
  43. ListFloatArray::ListFloatArray ()
  44. {
  45. n = 0; // alles leer
  46. p = 0;
  47. }
  48. // Destruktor
  49. ListFloatArray::~ListFloatArray ()
  50. {
  51. FloatListElem* q;
  52. while (p!=0)
  53. {
  54. q = p; // q ist erstes
  55. p = q->next; // entferne q aus Liste
  56. delete q;
  57. }
  58. }
  59. float& ListFloatArray::operator[] (int i)
  60. {
  61. FloatListElem* r=find(i);
  62. if (r==0)
  63. r=insert(i,0.0); // index einfuegen
  64. return r->value;
  65. }
  66. int ListFloatArray::numIndices ()
  67. {
  68. return n;
  69. }
  70. int ListFloatArray::minIndex ()
  71. {
  72. if (p==0) return 0;
  73. int min=p->index;
  74. for (FloatListElem* q=p->next;
  75. q!=0; q = q->next)
  76. if (q->index<min) min=q->index;
  77. return min;
  78. }
  79. int ListFloatArray::maxIndex ()
  80. {
  81. if (p==0) return 0;
  82. int max=p->index;
  83. for (FloatListElem* q=p->next;
  84. q!=0; q = q->next)
  85. if (q->index>max) max=q->index;
  86. return max;
  87. }
  88. bool ListFloatArray::isMember (int i) {
  89. return (find(i)!=0);
  90. }