home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
modula2
/
library
/
modula1
/
list2.mod
< prev
next >
Wrap
Text File
|
1987-06-11
|
1KB
|
72 lines
MODULE list;
FROM InOut IMPORT Write, WriteLn, WriteString, ReadCard, WriteCard;
FROM Storage IMPORT ALLOCATE;
TYPE ref = POINTER TO word;
word = RECORD
key: CARDINAL;
count:CARDINAL;
next: ref
END;
VAR k: CARDINAL;
root,sentinel: ref;
PROCEDURE search(x: CARDINAL; VAR root: ref);
VAR w1,w2,w3: ref;
BEGIN
w1 := root;
sentinel^.key := x;
IF w1 = sentinel THEN
NEW(root);
WITH root^ DO
key := x;
count := 1;
next := sentinel
END
ELSIF w1^.key = x THEN
INC(w1^.count);
ELSE
REPEAT w2 := w1; w1 := w2^.next UNTIL w1^.key =x;
IF w1 = sentinel THEN
w2 := root;
NEW(root);
WITH root^ DO
key := x;
count := 1;
next := w2
END
ELSE
INC(w1^.count);
w2^.next := w1^.next;
w1^.next := root;
root := w1
END
END
END search;
PROCEDURE printlist(w,z: ref);
BEGIN
WriteString(' Key Count');
WriteLn;
WHILE w # z DO
WriteCard(w^.key,6);
WriteCard(w^.count,6);
w := w^.next; WriteLn
END
END printlist;
BEGIN
NEW(sentinel);
root := sentinel;
LOOP
WriteString(' Enter k> ');
ReadCard(k); WriteLn;
IF k = 0 THEN EXIT END;
search(k,root);
END;
printlist(root,sentinel)
END list.