Advertisement
Guest User

Untitled

a guest
Jan 11th, 2018
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.03 KB | None | 0 0
  1. class DualListQueue[+T] private (private val frontList: List[T],
  2.                         private val rearList: List[T]) {
  3.   def enqueue[S >: T] (element: S): DualListQueue[S] = {
  4.     (frontList, rearList) match {
  5.       case (Nil, Nil) => new DualListQueue[S](List(element), List())
  6.       case(front, rear) => new DualListQueue[S](front, element::rear)
  7.     }
  8.   }
  9.  
  10.   def dequeue(): DualListQueue[T] = {
  11.     (frontList, rearList) match {
  12.       case (_::Nil, rear) => new DualListQueue[T](rear.reverse, Nil)
  13.       case(_::t, rear) => new DualListQueue[T](t, rear)
  14.       case(Nil, Nil) => this/*new DualListQueue[T](Nil, Nil)*/ //TODO: check
  15.     }
  16.   }
  17.  
  18.   def first(): T = {
  19.     (frontList, rearList) match {
  20.       case (h1::_, _) => h1
  21.       case(Nil, Nil) => throw new Exception("Underflow exception")
  22.     }
  23.   }
  24.  
  25.   def isEmpty(): Boolean = {
  26.     (frontList, rearList) == (Nil, Nil)
  27.   }
  28. }
  29.  
  30. object DualListQueue {
  31.   def apply[T](xs: T*) = new DualListQueue[T](xs.toList, List[T]())
  32.   def empty[T] = new DualListQueue[T](Nil, Nil)
  33. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement