0 Daumen
143 Aufrufe

hallo, kann jemand mir helfen antworten zu diesen Theoriefragen ?

.Nennen Sie jeweils ein sinnvolles Anwendungsgebiet fur Stacks, Queues und ¨
Listen. Erklaren Sie dazu kurz, warum Sie dafur geeignet sind

.Was wird mithilfe eines abstrakten Datentypen beschrieben?


Danke im voraus

von

2 Antworten

+3 Daumen

Das ist eine typische Frage in der OOP.


Listen sind dynamische Datenstrukturen, in denen du Inhalte (Objekte) speichern kannst, die miteinander verknüpft sind. Beispielsweise brauchst du eine sortierte Liste, in der du bestimmte Objekte speichern musst. Das könnte ein Telefonbuch mit entsprechenden Kontakten sein, das alphabetisch sortiert sein soll.


Ein Beispiel für einen Stapel ist die Aktion-rückgängig-Funktion von jedem beliebigem Editor. Der Eintrag in einem Stapel speichert einen Dokument-Zustand, der abgerufen werden kann. Ein neuer Stand kommt oben drauf, damit er als erstes wieder abgerufen werden kann. Der unterste Eintrag des Stapels ist somit der Zustand zu Beginn der Nutzung des Editors.


Eine Schlange kannst du für nicht-rekursive Routinen nutzen. Du kannst Routinenschritte definieren, die dann nach und nach durchgeführt werden sollen. Zum Beispiel bei einem Bildbearbeitungsprogramm. Das speichert alle Bearbeitungsschritte nach und nach in einer Schlange, die dann beim Export des bearbeiteten Bildes von vorne bis hinten ausgeführt werden und so das Bild aufeinander aufbauend verändern.


Beste Grüße

Felix

von

Die Undo-Funktion scheint mir wirklich ein besseres Beispiel für ein Anwendungsgebiet eines Stacks zu sein, als das Beispiel, das ich genannt habe.

+2 Daumen

Stack

Folgendes Programm in C:

#include <stdio.h>

int collatz(int);

int even(int n) {
return 1 + collatz(n/2);
}

int odd(int n) {
return 1 + collatz(3*n + 1);
}

int collatz(int n) {
if (n == 1) {
return 0;
} else if (n % 2 == 0) {
return even(n);
} else {
return odd(n);
}
}

int main() {
int n = collatz(837799);
printf("%d\n", n);
}

Das Programm besteht aus mehreren Funktionen, die sich gegenseitig aufrufen.

Wenn jetzt eine Funktion aufgerufen wird, woher weiß das Programm

  • welche Argumente an die Funktion übergeben wurden
  • an welcher Stelle es bei einem return die Verarbeitung fortsetzen soll,
  • welche Werte die lokalen Variablen hatten, unmittelbar bevor die Funktion aufgerufen wurde?

Das alles wird auf einem sogenannten Aufrufstapel (engl. call stack) gespeichert. Jeder Funktionsaufruf erzeugt einen neuen Eintrag auf dem Aufrufstapel. Jedes return, das ausgeführt wird, entfernt den obersten Eintrag vom Aufrufstapel.

Den Code für die Verwaltung der Aufrufstapels sieht man nicht, weil er während der Übersetzung des Quelltextes in Maschinencode vom Übersetzer automatisch eingefügt wird.

Wie dieser Code im Detail aussieht, kann bei verschiedenen Übersetzern unterschiedlich sein. Deshalb kann es vorkommen, dass eine Bibliothek, die mit einem bestimmten Übersetzer übersetzt wurde, nicht von einem Programm verwendet werden kann, das mit einem anderen Übersetzer übersetzt wurde. Die Details, wie der Aufrufstapel verwaltet wird, ist in einer sogenannten Aufrufkonvention (engl. calling convention) geregelt.

Queue

Ein Drucker ist an einen Rechner A angeschlossen. Der Rechner A ist an ein Netzwerk angeschlossen. Der Rechner A erlaubt anderen Rechnern des Netzwerks, den Drucker zu benutzen. Rechner A nennt man in diesem Zusammenhang einen Druckerserver. Er muss sicherstellen, dass Druckauftäge auch dann angenommen werden können, wenn der Drucker gerade druckt. Dazu packt er ankommende Druckauftäge in eine Warteschlange und wenn der Drucker mit seinem aktuellen Druckauftrag fertig ist entnimmt der Druckerserver den ältesten Druckauftrag und sendet ihn an den Drucker.

Listen

Ich weiß nicht genau, was damit gemeint ist.

Was wird mithilfe eines abstrakten Datentypen beschrieben?

Es werden Daten beschrieben und es werden Operationen beschrieben, die auf diese Daten zugreifen.

von 2,1 k

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community