How to Create a Stack in Go

Alissa LozhkinAlissa Lozhkin
2 min read

Like a queue, the stack data structure can store objects, allowing the user to add and remove objects from it. In contrast to a queue, a stack uses the “Last In, First out” (LIFO) principle to do this. Similarly to a queue, the best way to implement a stack is by creating a struct. Many of the methods for the stack struct were already implemented for the queue struct in this blog post. Therefore, we have the following starter code:

type Stack struct {
    elements []int  // stores the objects in the stack
    size     int  // the maximum size of the stack
}

func (s *Stack) GetLength() int {
    return len(s.elements) // return current length of the stack
}

func (s *Stack) Add(element int) {
    if s.GetLength() == s.size { // if the stack is at max length, don't add new element
        fmt.Println("Stack is full")
        return
    } else {
        s.elements = append(s.elements, element)
        return
    }
}

We then define a new method called Pop with the following implementation:

func (s *Stack) Pop() int {
    if s.GetLength() == 0 { // if stack is empty, there is nothing to pop
        fmt.Println("Stack is empty")
        return 0
    } else if s.GetLength() == 1 {
        temp := s.elements[0]
        s.elements = s.elements[:0] // if current length is 1, stack becomes empty
        return temp
    } else {
        length := s.GetLength()
        temp := s.elements[length-1]
        s.elements = s.elements[:length-1]
        return temp // return the popped element
    }
}

We can then define the main function to create and modify a stack object:

import "fmt"

func main() {
    s := Stack{size: 3} // creates a stack with a max size of 3
    s.Add(1)
    s.Add(2)
    s.Add(3)
    s.Add(4)  // Stack is full
    fmt.Println(s.elements) // [1, 2, 3]
    elem1 := s.Pop()
    elem2 := s.Pop()
    elem3 := s.Pop()
    fmt.Println(elem1, elem2, elem3) // 3, 2, 1
    s.Pop() // Stack is empty
    fmt.Println(s.elements) // []
}

The stack data structure is now implemented!

0
Subscribe to my newsletter

Read articles from Alissa Lozhkin directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Alissa Lozhkin
Alissa Lozhkin

My name is Alissa and I am a fourth-year computer science and math student at the University of Toronto! I am very interested in computer science and software development, and I love learning about new technologies! Get in touch with me on LinkedIn: https://www.linkedin.com/in/alissa-lozhkin