Guide to the Stack Data Structure
When it comes to working with abstract data structures there are two components that need to be understood: Queues and Stacks. In this guide walks through understanding the Stack data structure.
Guide Tasks
  • Read Tutorial

When it comes to working with abstract data structures there are two components that need to be understood: Queues and Stacks. In this guide walks through understanding the Stack data structure.

Real World Example of Stacks

As we spoke about previously in regards to the Queue data structure, it functions like a line at an amusement park. The first elements that go into the structure are also the first elements that come out. When it comes to understanding the stack data structure there is another helpful real world analogy.

Stacks work in the exact opposite way that queues do. In algorithm terminology stacks follow the Last In First Out (LIFO) data flow. This means that the last item added to the data structure will be the first element removed.

small

You can think about how this works by considering a tower of blocks. Each time you add a new block to the pile it goes on top. If you want to remove a block you can only remove the block on the top of the pile since that's the only one you have access to.

Understanding the Stack Data Structure

For our code example we're going to use the Scala programming language. However when it comes to working with abstract data types such as Stacks and Queues the language itself is not important.

Creating the Stack

In Scala we can create a new Stack structure with the following command:

scala> val stack = new scala.collection.mutable.Stack[String]

Running this command in the Scala Repl environment will create a stack with the String data structure and will return the following:

stack: scala.collection.mutable.Stack[String] = Stack()

Adding to the Stack

Like our example we're going to add blocks to our stack. We can add a single block by using the push method:

scala> stack.push("Red Block")

If you run this code you'll receive the following output:

res0: stack.type = Stack(Red Block)

We can add some more blocks with the commands:

scala> stack.push("Blue Block")
scala> stack.push("Green Block")

This will add two more blocks to the stack.

Viewing the Stack

We can see all of the items in the block stack by running the command:

scala> stack

This will output the entire structure and its contents:

scala.collection.mutable.Stack[String] = Stack(Green Block, Blue Block, Red Block)

Removing Items Off the Stack

Now let's start removing items from the stack. We're going to leverage the pop method in order to accomplish this. Which means we're going to pop items from the stack. If I run the command:

scala> stack.pop

It will output the following:

res4: String = Green Block

This is good since the Green Block was the last block we added to the stack.

I you run the stack pop command it will remove the Blue Block. And lastly if you run stack one more time it will show that the structure only has the Red Block, which was the first one added.

Summary

This structure is quite simple, which is one of the keys to an abstract data structure. Stacks need to be straightforward and only perform a few key tasks such as adding and removing elements.

The behavior of stacks and queues may seem incredibly basic. However you'll discover that when you're working with algorithms that utilize data structures, all of your programs will follow either the pattern of a stack or a queue. Which is why it's critical to understand how they perform.