pointer stack works

This commit is contained in:
Ruben Shekspir 2019-04-16 21:19:28 +04:00
parent 1a573a5c83
commit 740bd75240
3 changed files with 55 additions and 16 deletions

View file

@ -3,10 +3,14 @@ IMPORT List, Out, Sys;
TYPE TYPE
integer* = Sys.integer; integer* = Sys.integer;
TObject* = Sys.TObject;
Node* = POINTER TO NodeDesc;
NodeDesc* = List.NodeDesc;
TChar* = POINTER TO TCharDesc; TChar* = POINTER TO TCharDesc;
TCharDesc = RECORD (List.NodeDesc) TCharDesc = RECORD (Sys.TObjectDesc)
char* : CHAR char* : CHAR
END; END;
@ -20,29 +24,47 @@ TYPE
top: PROCEDURE(self: CharacterStackType) : CHAR; top: PROCEDURE(self: CharacterStackType) : CHAR;
END; END;
PROCEDURE pop(self: CharacterStackType): CHAR;
VAR VAR
ch: TChar; characterStack: CharacterStackType;
BEGIN
NEW(ch);
ch := self.Get(self, self.Count);
self.Delete(self, self.Count);
RETURN ch.char;
END pop;
PROCEDURE push(self: CharacterStackType; char: CHAR); PROCEDURE push(self: CharacterStackType; char: CHAR);
VAR VAR
int: integer;
ch: TChar; ch: TChar;
int: integer;
BEGIN BEGIN
NEW(ch); NEW(ch);
ch.char := char; ch.char := char;
int := self.Add(self, ch); int := self.Add(self, ch);
END push; END push;
PROCEDURE pop(self: CharacterStackType): CHAR;
VAR
n: Node;
BEGIN
NEW(n);
IF self.Count = 0 THEN RETURN 0AX END;
n := self.Get(self, self.Count - 1);
self.Delete(self, self.Count - 1);
RETURN n.obj(TChar).char;
END pop;
PROCEDURE top(self: CharacterStackType): CHAR;
VAR
n: Node;
BEGIN
NEW(n);
IF self.Count = 0 THEN RETURN 0AX END;
n := self.Get(self, self.Count - 1);
RETURN n.obj(TChar).char;
END top;
PROCEDURE Create* () : CharacterStackType; PROCEDURE Create* () : CharacterStackType;
VAR l : CharacterStackType; VAR
l : CharacterStackType;
BEGIN BEGIN
NEW(l); NEW(l);
l.First := NIL; l.First := NIL;
@ -61,23 +83,39 @@ PROCEDURE Create* () : CharacterStackType;
l.pop := pop; l.pop := pop;
l.push:= push; l.push:= push;
(* l.top := top; *) l.top := top;
RETURN(l); RETURN(l);
END Create; END Create;
VAR
characterStack: CharacterStackType;
BEGIN BEGIN
NEW(characterStack); NEW(characterStack);
characterStack := Create();
characterStack.push(characterStack, 'a'); characterStack.push(characterStack, 'a');
characterStack.push(characterStack, 'b'); characterStack.push(characterStack, 'b');
characterStack.push(characterStack, 'c'); characterStack.push(characterStack, 'c');
Out.Char(characterStack.pop(characterStack));
Out.Char(characterStack.top(characterStack));
Out.Ln(); Out.Ln();
Out.Char(characterStack.pop(characterStack)); Out.Char(characterStack.pop(characterStack));
Out.Ln(); Out.Ln();
Out.Char(characterStack.top(characterStack));
Out.Ln();
Out.Char(characterStack.pop(characterStack)); Out.Char(characterStack.pop(characterStack));
Out.Ln(); Out.Ln();
Out.Char(characterStack.top(characterStack));
Out.Ln();
Out.Char(characterStack.pop(characterStack));
Out.Ln();
Out.Char(characterStack.top(characterStack));
Out.Ln();
Out.Char(characterStack.pop(characterStack));
Out.Ln();
Out.Char(characterStack.top(characterStack));
Out.Ln();
Out.Char(characterStack.pop(characterStack));
Out.Ln();
Out.Char(characterStack.top(characterStack));
Out.Ln();
Out.Char(characterStack.pop(characterStack)); Out.Char(characterStack.pop(characterStack));
Out.Ln(); Out.Ln();
END CharaterStack. END CharaterStack.

BIN
CharaterStack Executable file

Binary file not shown.

1
diaspora2hugo Submodule

@ -0,0 +1 @@
Subproject commit 3fb4cbd410309ff341510171bdd6f154e767c01b