or how about a tree
NPC Code:
Program Trees;
Uses CRT;
Type
ptr = ^nodetype;
nodetype = record
info: String;
left: ptr;
right: ptr;
end;
Var
sel: Char;
ch: String;
root: ptr;
LEVEL: Integer;
{///////////////////////////////////////////////////////////////////////}
Procedure Add(var r:ptr; val:String);
Var
node, curr, prev: ptr;
Begin
new(node);
node^.info := val;
node^.left := nil;
node^.right := nil;
If r = nil then
r := node
Else Begin
curr := r;
prev := r;
While curr <> nil do
Begin
prev := curr;
If val < curr^.info then
curr := curr^.left
Else curr := curr^.right;
End;
If prev^.info > val then
prev^.left := node
Else prev^.right := node;
End;
End;
{///////////////////////////////////////////////////////////////////////}
Procedure Print(curr:ptr);
Begin
If curr <> nil then
Begin
Print(curr^.left); {L}
WriteLn(curr^.info); {N}
Print(curr^.right); {R}
End;
End;
{///////////////////////////////////////////////////////////////////////}
Procedure TreePrint(curr:ptr);
Begin
inc(LEVEL, 1);
If curr <> nil then
Begin
TreePrint(curr^.right); {R}
WriteLn(curr^.info:LEVEL * 5); {N}
TreePrint(curr^.left); {L}
End;
dec(LEVEL, 1);
End;
{///////////////////////////////////////////////////////////////////////}
Begin
root := nil;
LEVEL := -1;
ClrScr;
Repeat
{ClrScr;
GotoXY(1,1);}
{ BackDrop;
MenuCreator(34,10,5,'A','Add','B');
MenuCreator(34,11,5,'P','Print','C');
MenuCreator(34,12,5,'Q','Quit','E');}
WriteLn('(A)dd');
WriteLn('(P)rint');
WriteLn('(Q)uit');
WriteLn;
WriteLn;
Repeat
sel := ReadKey;
Until sel <> '';
sel := UpCase(sel);
Case sel of
'A': Begin
Write('Enter in a character: ');
ReadLn(ch);
Add(root, ch);
End;
'P': Print(root);
'T': TreePrint(root);
End;
Until sel = 'Q';
End.