+1 Daumen
665 Aufrufe

Aufgabe:

Nennen Sie jeweils ein sinnvolles Anwendungsgebiet für Stacks, Queues und Listen.

Erklären Sie dazu kurz, warum Sie dafür geeignet sind.

Was wird mit Hilfe eines abstrakten Datentypen beschrieben?

Avatar von

3 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

Avatar 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.

Avatar von 5,7 k
0 Daumen

Antwort mit KI erzeugt

Nennen Sie jeweils ein sinnvolles Anwendungsgebiet für Stacks, Queues und Listen.

Stacks

Anwendungsgebiet: Undo-Funktionalität in Texteditoren

Ein Stack (Stapel) ist ideal für die Implementierung einer Undo-Funktionalität in Texteditoren oder anderen Anwendungen, die eine Rückgängig-Mach-Funktion erfordern. Dabei werden die zuletzt ausgeführten Aktionen in der Reihenfolge ihres Auftretens auf einem Stack gespeichert. Wenn der Benutzer die Undo-Funktion ausführt, wird die zuletzt durchgeführte Aktion (das oberste Element des Stacks) entfernt und rückgängig gemacht. Dieses Verhalten folgt dem Prinzip Last-In-First-Out (LIFO), welches bedeutet, dass das zuletzt hinzugefügte Element als erstes entfernt wird.

Queues

Anwendungsgebiet: Druckauftragsverwaltung

Eine Queue (Warteschlange) ist besonders geeignet für die Verwaltung von Druckaufträgen in einem Netzwerkdrucker oder einem Betriebssystem. Druckaufträge werden in der Reihenfolge ihres Eintreffens in die Queue eingefügt und anschließend in derselben Reihenfolge verarbeitet und gedruckt. Dies entspricht dem First-In-First-Out (FIFO)-Prinzip, bei dem das zuerst hinzugefügte Element als erstes entfernt und verarbeitet wird. So wird sichergestellt, dass alle Druckaufträge in der Reihenfolge ihrer Anforderung bearbeitet werden.

Listen

Anwendungsgebiet: Kundenverwaltung

Listen sind flexibel einsetzbar und eignen sich hervorragend für die Verwaltung von Kundendaten in einem CRM-System (Customer-Relationship-Management). Listen bieten die Möglichkeit, Elemente dynamisch hinzuzufügen, zu entfernen und an beliebigen Positionen zu durchlaufen. Dies ist besonders nützlich für Anwendungen, bei denen die Menge der Daten variiert und häufig Änderungen (wie das Einfügen neuer Kundeninformationen oder das Aktualisieren bestehender Daten) vorgenommen werden. Listen unterstützten sowohl sequentiellen als auch nicht-sequentiellen Datenzugriff, was sie für eine Vielzahl von Datenverwaltungsoperationen geeignet macht.


Was wird mit Hilfe eines abstrakten Datentypen beschrieben?

Ein abstrakter Datentyp (ADT) beschreibt die Eigenschaften einer Datenstruktur aus der Sicht des Benutzers oder des Entwicklers. Er definiert die Daten und die Operationen, die auf diese Daten angewendet werden können, ohne dabei die Details zu ihrer Implementierung offenzulegen. Ein ADT konzentriert sich auf *was* Operationen leisten, ohne festzulegen, *wie* diese Operationen intern umgesetzt werden. In diesem Sinn beschreibt ein ADT das Verhalten einer Datenstruktur in Form von Wertemengen und Operationen auf diesen Werten, wie das Hinzufügen oder Entfernen von Elementen, Zugriff auf Elemente, suche nach Elementen etc. Ziel eines abstrakten Datentyps ist es, die Verwendung einer Datenstruktur von ihrer Implementierung zu abstrahieren, sodass Datenstrukturen flexibel und effizient in unterschiedlichen Kontexten verwendet und implementiert werden können.
Avatar von 2,9 k

Ein anderes Problem?

Stell deine Frage

Ähnliche Fragen

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community