|
Hauptseite - Welches System? - Hardware - Software - Emulatoren - |
Internet MausNet Programmieren Verweise Über |
Die folgenden Beispiele zeigen einen Stack.
Sprache | C | Pascal | Modula |
---|---|---|---|
Beispiel | stack.c | stack.pas | stack.mod |
/* Da der Datentyp des Stacks erst bei einer konkreten Anwendung */ /* feststeht, ist der Stack nur als Beispiel und nicht als Modul */ /* programmiert. Mit mehr Aufwand knnte man auch Zeiger auf die */ /* Daten (in Pascal ber variante Records als long_integer) ab- */ /* speichern und damit einen universellen Stack implementieren. */ #include#include typedef long StackDataType; typedef struct stack_element { StackDataType Daten; struct stack_element *Next; } StackElement, *StackKnoten; typedef StackKnoten Stack; void StackCreate(Stack *MyStack) { *MyStack = NULL; } int StackIsEmpty(Stack MyStack) { return(MyStack == NULL); } void StackPush(Stack *MyStack, StackDataType Daten) { StackKnoten NewElement; NewElement = malloc(sizeof(StackElement)); NewElement->Daten = Daten; NewElement->Next = *MyStack; *MyStack = NewElement; } void StackPop(Stack *MyStack) { StackKnoten OldElement; if (!StackIsEmpty(*MyStack)) { OldElement = *MyStack; *MyStack = (*MyStack)->Next; free(OldElement); } } void StackTop(Stack MyStack, StackDataType *Daten) { if (!StackIsEmpty(MyStack)) *Daten = MyStack->Daten; }
(* Da der Datentyp des Stacks erst bei einer konkreten Anwendung *) (* feststeht, ist der Stack nur als Beispiel und nicht als Modul *) (* programmiert. Mit mehr Aufwand knnte man auch Zeiger auf die *) (* Daten (in Pascal ber variante Records als long_integer) ab- *) (* speichern und damit einen universellen Stack implementieren. *) type StackDataType = long_integer; StackKnoten = ^StackElement; StackElement = record Daten : StackDataType; Next : StackKnoten; end; Stack = StackKnoten; procedure StackCreate(var MyStack:Stack); begin MyStack := nil; end; function StackIsEmpty(MyStack:Stack) : boolean; begin StackIsEmpty := MyStack=nil; end; procedure StackPush(var MyStack:Stack; Daten:StackDataType); var NewElement:StackKnoten; begin new(NewElement); NewElement^.Daten := Daten; NewElement^.Next := MyStack; MyStack := NewElement; end; procedure StackPop(var MyStack:Stack); var OldElement : StackKnoten; begin if not StackIsEmpty(MyStack) then begin OldElement := MyStack; MyStack := MyStack^.Next; dispose(OldElement); end; end; procedure StackTop(MyStack:Stack; var Daten:StackDataType); begin if not StackIsEmpty(MyStack) then Daten := MyStack^.Daten; end;
(* Da der Datentyp des Stacks erst bei einer konkreten Anwendung *) (* feststeht, ist der Stack nur als Beispiel und nicht als Modul *) (* programmiert. Mit mehr Aufwand knnte man auch Zeiger auf die *) (* Daten (in Pascal ber variante Records als long_integer) ab- *) (* speichern und damit einen universellen Stack implementieren. *) FROM Heap IMPORT Allocate, Deallocate; FROM SYSTEM IMPORT TSIZE; TYPE StackDataType = LONGINT; StackKnoten = POINTER TO StackElement; StackElement = RECORD Daten : StackDataType; Next : StackKnoten; END; Stack = StackKnoten; PROCEDURE StackCreate(VAR MyStack:Stack); BEGIN MyStack := NIL; END StackCreate; PROCEDURE StackIsEmpty(MyStack:Stack) : BOOLEAN; BEGIN RETURN MyStack=NIL; END StackIsEmpty; PROCEDURE StackPush(VAR MyStack:Stack; Daten:StackDataType); VAR NewElement:StackKnoten; BEGIN Allocate(NewElement, TSIZE(StackElement)); NewElement^.Daten := Daten; NewElement^.Next := MyStack; MyStack := NewElement; END StackPush; PROCEDURE StackPop(VAR MyStack:Stack); VAR OldElement:StackKnoten; BEGIN IF NOT StackIsEmpty(MyStack) THEN OldElement := MyStack; MyStack := MyStack^.Next; Deallocate(OldElement, TSIZE(StackElement)); END; END StackPop; PROCEDURE StackTop(MyStack:Stack; VAR Daten:StackDataType); BEGIN IF NOT StackIsEmpty(MyStack) THEN Daten := MyStack^.Daten; END; END StackTop;
![]() |
English version not yet available. |