University of Western Australia
CS201 Mid-term Examination
Ross Lecture Theatre
Thursday 14th April, 1994
12.00 – 1.00pm
val a = 1;
val b = 2; val c = 3; fun f a = let val b = a + c in a + b end; val b = 5; f b; |
______________________________________________________________________
Define a function countLevel : int -> ’a Tree -> int that counts the number of nodes at a given level of a tree. The expression, countLevel n t, should return the number of nodes at level n in the tree t.
_______________________________________________________________________________________________________________
signature EQueue =
sig type Item type Queue val empty : Queue val enq : (Item * Queue) -> Queue val deq : Queue -> (Item * Queue) val menq: (Item list * Queue) -> Queue end |
An implementation of a queue, including this operation, uses the type declaration
type Queue = (Item list list) * (Item list list)
|
the operations empty and menq are implemented as follows:
val empty = ([],[])
fun menq(items, (enter, leave)) = (items :: enter, leave) |
fun enq(item, ([],leave)) =
| enq(item, ((h :: t),leave)) = fun deq(enter, (h :: t) :: r) = | deq(enter, [] :: r ) = | deq(h :: t, [] ) = | deq([], [] ) = |
for this implementation?
_______________________________________________________________________________________________________________
signature PQueue =
sig type Item type Queue val empty : Queue val enq : (Item * Queue) -> Queue val deq : Queue -> (Item * Queue) val merge: (Queue * Queue) -> Queue end |
An implementation of a priority queue of integer priorities represents the queue by a list kept in order of decreasing priority:
type Item = int
type Queue = Item list |
Here is the function deq: Queue -> int * Queue from this implementation
fun deq [] = raise Deq
| deq (h :: t) = (h, t) |
fun enq (e, q) = e :: q
|
Complete the following table giving the complexity of the operations for each representation. (You are not asked to implement all the operations.)
ordered | unordered | |
enq | O(1) | |
deq | O(1) | |
merge | ||
_______________________________________________________________________________________________________________
The End (C) Michael Fourman 1994-2006