Use ocaml language to Write a module for Queue with functions: i) create ; ii) c
ID: 3794467 • Letter: U
Question
Use ocaml language to Write a module for Queue with functions: i) create ; ii) clear ; iii) increase; iv) enqueue; v) dequeue; and vi) is_empty
the following example is for Stack ( use same way to write for Queue
# module MyStack =
struct
type ’a t = { mutable sp : int; mutable c : ’a array }
exception Empty
let create () ={sp=0;c=[||]}
let clear s = s.sp <- 0; s.c <- [||]
let increase s x = s.c <- Array.append s.c (Array.create 5 x)
let push x s =
if s.sp >= Array.length s.c then increase s x;
s.c.(s.sp) <- x;
s.sp <- succ s.sp
let pop s =
if s.sp =0 then raise Empty
else (s.sp <- pred s.sp ; s.c.(s.sp))
let length s = s.sp
let iter f s = for i = pred s.sp downto 0 do f s.c.(i) done
end ;;
Explanation / Answer
module Queue =
struct
type 'a queue = {mutable front : int; mutable rear : int; mutable c : 'a array}
exception EmptyQueue
let create () = { front=0; rear=0; c=[||] }
let clear queue =
queue.rear = 0; queue.front = 0; queue.c <- [||];;
let increase queue x =
queue.c <- Array.append queue.c (Array.create 5 x)
let enqueue x queue =
if queue.rear >= Array.length queue.c then increase queue x;
queue.c.(queue.rear) <- x;
queue.rear <- succ queue.rear;
;;
let dequeue queue =
if queue.front = queue.rear then raise EmptyQueue
else (queue.front <- succ queue.front ; queue.c.(queue.front))
;;
let length queue = queue.rear-queue.front
let is_empty queue = if queue.front = queue.rear then true else false
end
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.