Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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