91 lines
1.4 KiB
Text
91 lines
1.4 KiB
Text
CARD EndProg ;required for ALLOCATE.ACT
|
|
|
|
INCLUDE "D2:ALLOCATE.ACT" ;from the Action! Tool Kit. You must type 'SET EndProg=*' from the monitor after compiling, but before running this program!
|
|
|
|
DEFINE PTR="CARD"
|
|
DEFINE NODE_SIZE="3"
|
|
TYPE ListNode=[CHAR data PTR nxt]
|
|
|
|
ListNode POINTER listBegin
|
|
|
|
PROC AddBegin(CHAR v)
|
|
ListNode POINTER n
|
|
|
|
n=Alloc(NODE_SIZE)
|
|
n.data=v
|
|
n.nxt=listBegin
|
|
listBegin=n
|
|
RETURN
|
|
|
|
PROC AddAfter(CHAR v ListNode POINTER node)
|
|
ListNode POINTER n
|
|
|
|
IF node=0 THEN
|
|
PrintE("The node is null!") Break()
|
|
ELSE
|
|
n=Alloc(NODE_SIZE)
|
|
n.data=v
|
|
n.nxt=node.nxt
|
|
node.nxt=n
|
|
FI
|
|
RETURN
|
|
|
|
PROC Clear()
|
|
ListNode POINTER n,next
|
|
|
|
n=listBegin
|
|
WHILE n
|
|
DO
|
|
next=n.nxt
|
|
Free(n,NODE_SIZE)
|
|
n=next
|
|
OD
|
|
listBegin=0
|
|
RETURN
|
|
|
|
PROC PrintList()
|
|
ListNode POINTER n
|
|
|
|
n=listBegin
|
|
Print("(")
|
|
WHILE n
|
|
DO
|
|
Put(n.data)
|
|
IF n.nxt THEN
|
|
Print(", ")
|
|
FI
|
|
n=n.nxt
|
|
OD
|
|
PrintE(")")
|
|
RETURN
|
|
|
|
PROC TestAddBegin(CHAR v)
|
|
AddBegin(v)
|
|
PrintF("Add '%C' at the begin:%E",v)
|
|
PrintList()
|
|
RETURN
|
|
|
|
PROC TestAddAfter(CHAR v ListNode POINTER node)
|
|
AddAfter(v,node)
|
|
PrintF("Add '%C' after '%C':%E",v,node.data)
|
|
PrintList()
|
|
RETURN
|
|
|
|
PROC TestClear()
|
|
Clear()
|
|
PrintE("Clear the list:")
|
|
PrintList()
|
|
RETURN
|
|
|
|
PROC Main()
|
|
Put(125) PutE() ;clear screen
|
|
|
|
AllocInit(0)
|
|
listBegin=0
|
|
|
|
PrintList()
|
|
TestAddBegin('A)
|
|
TestAddAfter('B,listBegin)
|
|
TestAddAfter('C,listBegin)
|
|
TestClear()
|
|
RETURN
|