Stack in Scala

stack is a data structure that follows the last-in, first-out(LIFO) principle. We can add or remove element only from one end called top. Scala has both mutable and immutable versions of a stack.

Syntax :

import scala.collection.mutable.Stack
var s = Stack[type]()

// OR
var s = Stack(val1, val2, val3, ...)

Operations on Stack

Once stack has been created we can either push elements to the stack or pop them out of the stack.

  • Push: We can push element of any type to the stack using push() function. All elements must have same data type.

Example :

// Scala program to
// push element
// to the stack
  
import scala.collection.mutable.Stack
  
// Creating object
object TAS
{
      
    // Main method
    def main(args:Array[String])
    {
  
        var s = Stack[Int]()
      
        // pushing values
        // one at a time
        s.push(5)
        s.push(1)
        s.push(2)
        println("s:" + s)
  
        var s2 = Stack[Int]()
  
        // pushing multiple values
        s2.push(5,1,2)
        println("s2:" + s2)
      
    }
}

Output:

s:Stack(2, 1, 5)
s2:Stack(2, 1, 5)
  • Pop: We can pop element from top of the stack using pop function. The function returns the same type as that of elements of the stack.

Example :

// Scala program to
// pop element from
// top of the stack
  
import scala.collection.mutable.Stack
  
// Creating object
object TAS
{
      
    // Main method
    def main(args:Array[String])
    {
  
        var s = Stack[Int]()
  
        s.push(5)
        s.push(1)
        s.push(2)
        println(s)
  
        // pop element from
        // top of the stack
  
        println("Popped:" + s.pop)
        println("Popped:" + s.pop)
        println("Popped:" + s.pop)
    }
}

Output:

Stack(2, 1, 5)
Popped:2
Popped:1
Popped:5

Other Functions :

Let’s discuss some more functions with examples.

  • isEmpty: To check whether the stack is empty. Returns true if it is empty.

Example :

// Scala program to
// check if the stack
// is empty
  
import scala.collection.mutable.Stack
  
// Creating object
object TAS
{
      
    // Main method
    def main(args:Array[String])
    {
  
        var s = Stack[Int]()
  
        s.push(5)
        s.push(1)
        s.push(2)
        println(s)
  
        // pop element from
        // top of the stack
  
        println("Popped:" + s.pop)
        println("Popped:" + s.pop)
        println("Empty:" + s.isEmpty)
        println("Popped:" + s.pop)
  
        // all three elements popped
        println("Empty:" + s.isEmpty)
    }
}

Output:

Stack(2, 1, 5)
Popped:2
Popped:1
Empty:false
Popped:5
Empty:true

top: Returns the element that is currently at the top of the stack.

Example :

// Scala program to
// print top of stack
  
import scala.collection.mutable.Stack
  
// Creating object
object TAS
{
      
    // Main method
    def main(args:Array[String])
    {
  
        var s = Stack[Int]()
  
        s.push(5)
        s.push(1)
        s.push(2)
        println(s)
        println("Top: " + s.top)
        println("Popped:" + s.pop)
        println("Top: " + s.top)
    }
}

Output:

Stack(2, 1, 5)
Top: 2
Popped:2
Top: 1

size: Returns the number of elements present in the stack.

Example :

// Scala program to
// print size of the stack
  
import scala.collection.mutable.Stack
  
// Creating object
object TAS
{
      
    // Main method
    def main(args:Array[String])
    {
  
        var s = Stack[Int]()
  
        s.push(5)
        s.push(1)
        s.push(2)
        println(s)
        println("Size: " + s.size)
        println("Popped:" + s.pop)
        println("Size: " + s.size)
    }
}

Output:

Stack(2, 1, 5)
Size: 3
Popped:2
Size: 2

Chockalingam