LinkedListStack impl

Run Settings
LanguageScala
Language Version
Run Command
object Main extends App { case class Node(item: String, next: Option[Node]) class FixedCapacityStack(capacity: Int = 0){ val s = Array.fill[String](capacity){""} var n = 0 def isEmpty: Boolean = n == 0 def push(item: String): Unit = { s(n) = item n = n + 1 } def pop(): String = { n = n - 1 val item = s(n) s(n) = null item } } class ResizingArrayStack(capacity: Int = 0){ var s: Array[String] = Array.fill[String](capacity){""} var n = 0 def isEmpty: Boolean = n == 0 def push(item: String): Unit = { if (n == s.length) resize(2 * s.length) s(n) = item n = n + 1 } def pop(): String = { n = n - 1 val item = s(n) s(n) = null if (n > 0 && n == s.length/4) resize(s.length/2) item } def resize(capacity: Int): Unit = { val copy = Array.fill[String](capacity){""} for (i <- 0 until n){ copy(i) = s(i) } s = copy } } class LinkedListCustom { var first:Option[Node] = None def isEmpty(): Boolean = first.isEmpty def push(item: String)= { val formerFirst = first first = Some(Node(item, formerFirst)) } def pop(): String = { val res = first.map(_.item) first = first.flatMap(_.next) res.getOrElse("") } } val l = new ResizingArrayStack(20) for (n <- 0 until 100) { l.push(n.toString) } for (n <- 0 until 100) { println(l.pop()) } }
Editor Settings
Theme
Key bindings
Full width
Lines