• Keine Ergebnisse gefunden

Was ist ein Stack (Keller)?

N/A
N/A
Protected

Academic year: 2021

Aktie "Was ist ein Stack (Keller)?"

Copied!
15
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Stacks

Nur ein Datenein und -Ausgang

(2)

20.12.2002 Prof. Zavodnik / C Vorlesung / Kapitel VIII 2

Was ist ein Stack (Keller)?

„ Eine Listenstruktur, mit nur einem internen Zeiger SP (Stack Pointer)

„ Last In First Out (LIFO) Prinzip, d.h das zuletzt eingefügte Element

wird das erste, das entfernt wird

(3)

Stack-Struktur

SP

(4)

20.12.2002 Prof. Zavodnik / C Vorlesung / Kapitel VIII 4

Stackoperationen

„ Stack initialisieren: void initStack()

„ Prüfen, ob Stack leer ist: int istLeer()

„ Datenelement vom Typ DATA einfügen:

void push(DATA)

„ Datenelement vom Stack entfernen:

DATA pop()

(5)

Die Include-Datei "stack.h"

#ifndef NULL

#define NULL 0

#endif

typedef ... DATA;

typedef struct StackKnoten { DATA d;

struct StackKnoten

*Naechster;

} STACKKNOTEN;

typedef STACKKNOTEN *STACK_POINTER;

STACK_POINTER SP;

(6)

20.12.2002 Prof. Zavodnik / C Vorlesung / Kapitel VIII 6

Bemerkungen

„ SP ist eine (interne) Variable

„ stack.h darf nur einmal im

Programm includiert werden

„ Anwender sieht die typedefs und die Variable SP nicht

(7)

Die Stack-Operationen I

void initStack {

SP = NULL;

}

int istLeer() {

return (SP == NULL);

}

(8)

20.12.2002 Prof. Zavodnik / C Vorlesung / Kapitel VIII 8

Die Stack-Operationen II

DATA pop() {

DATA temp;

STACK_POINTER where;

if (!istLeer()){

temp = SP->d;

where = SP;

SP = SP->Naechster;

free(where);

return temp;}

else{

fprintf(stderr, "Stack ist leer!\n");

exit(1);

} }

(9)

Die Stack-Operationen III

void push (DATA x) {

STACK_POINTER temp;

temp = (STACK_POINTER)malloc(sizeof(STACKKNOTEN));

temp->d = x;

temp->next = SP;

SP = temp;

}

(10)

20.12.2002 Prof. Zavodnik / C Vorlesung / Kapitel VIII 10

Anwendung:

Umgekehrte Polnische Notation

„ Statt 1 + 2 schreibe man 1 2 +

„ Zuerst die Operand(en), dann der Operator

„ Notation ist Klammer-frei

„ Beispiel (a - b)*c wird a b - c *

geschrieben

„ Ausdrücke werden von links nach rechts ausgewertet

(11)

Beispiel

Polnischer Ausdruck 5 4 + 6 * 4 -

5 5

4

9 9

6

54

4

50

push push pop push pop push pop

54

(12)

20.12.2002 Prof. Zavodnik / C Vorlesung / Kapitel VIII 12

Algorithmus

„ while (nextsym != EndSym)

‹ if (nextsym == Operator)

 pop oberste 2 Stackelemente

 wende Operator auf diese Stackelemente an

 push Ergebnis

‹ else

 push nextsym

(13)

Bemerkungen

„ Stackelemente können entweder Zahlen oder Operatoren enthalten, d.h. Union

„ Zahlen müssen von char nach int umgewandelt werden

„ Ausdruck wird als Reihung von solchen Unions abgespeichert

(14)

20.12.2002 Prof. Zavodnik / C Vorlesung / Kapitel VIII 14

Bemerkung

„ Tag-Feld in DATA Struktur, um feststellen zu können, ob Inhalt Operator oder Operand ist

„ Auch möglich: Ausdruck selbst in einer Stack-Struktur speichern

„ Zweiter Stack wird für Auswertung gebraucht

(15)

Programm

„ Siehe Folie

„ Wenn der Ausdruck syntaktisch korrekt ist, ist das Ergebnis das einzige Element im Stack

„ Ist dies nicht der Fall, dann gibt es einen Fehler

Referenzen

ÄHNLICHE DOKUMENTE

verschachtelten Prozeduren m¨ ussen viele Zugriffslinks verfolgt werden. Abhilfe: Displays

• Maintaining connectivity to legacy IPv4 devices/networks during the transition to IPv6-only deployments..

Die glp-Fraktion bedauert es nicht, dass Clavaleyres aus dem Kanton Bern weggeht, sondern sie freut sich für die Gemeinde Clavaleyres , dass diese nun eine Lösung gefunden hat,

Aber es ist auch klar, dass bei einem über vier Jahre laufenden Kredit, immer Dinge kommen, die man nicht vorausgesehen hat.. Franken erschei- nen uns auch deshalb als

Der Studie Wellcome Global Monitor über die Einstellungen von Menschen auf der ganzen Welt zu Wissenschaft und gro- ßen gesundheitlichen Heraus- forderungen zufolge halten

lichkeit geregelt, dass die Apothekenleitung eine betriebsbedingte Kündigung ausspricht und gleichzeitig der gekündigten PTA eine Abfindung in Höhe eines halben

Aber natürlich will Ihre Apotheke nicht nur die Pfennigfuchser-Kunden neu für sich gewinnen, sondern auch den Gewinn steigern.. Dabei kann eine Bon-Analyse

§ 45 SGB V besteht der Anspruch auf Vergü- tung für die Dauer von 10 Tagen, und nur wenn das Kind noch keine 12 Jahre alt ist. Außerdem besteht gemäß § 45 SGB V ein Anspruch auf