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