💬Что такое стек и как его реализовать с помощью Go?
📌Стек — тип данных, представляющий собой список элементов, организованных по принципу LIFO (last in — first out, «последним пришёл — первым вышел»).
📌Стек хранит последовательность данных. Связаны данные так: каждый элемент указывает на тот, который нужно использовать следующим. Это линейная связь — данные идут друг за другом и нужно брать их по очереди. Из середины стека брать нельзя.
📌Главный принцип работы стека — данные, которые попали в стек недавно, используются первыми. Чем раньше попал — тем позже используется. После использования элемент стека исчезает, и верхним становится следующий элемент.
📌Три основные операции над стеком:
🔸push — добавление элемента
🔸pop — удаление верхнего элемента
🔸peek — возвращение последнего элемента, не удаляя его.
👉 В Go стек можно реализовать с помощью среза:
Мы использовали срез для хранения элементов стека. Метод
📌Стек — тип данных, представляющий собой список элементов, организованных по принципу LIFO (last in — first out, «последним пришёл — первым вышел»).
📌Стек хранит последовательность данных. Связаны данные так: каждый элемент указывает на тот, который нужно использовать следующим. Это линейная связь — данные идут друг за другом и нужно брать их по очереди. Из середины стека брать нельзя.
📌Главный принцип работы стека — данные, которые попали в стек недавно, используются первыми. Чем раньше попал — тем позже используется. После использования элемент стека исчезает, и верхним становится следующий элемент.
📌Три основные операции над стеком:
🔸push — добавление элемента
🔸pop — удаление верхнего элемента
🔸peek — возвращение последнего элемента, не удаляя его.
👉 В Go стек можно реализовать с помощью среза:
type Stack struct {
items []int
}
func (s *Stack) Push(item int) {
s.items = append(s.items, item)
}
func (s *Stack) Pop() int {
if len(s.items) == 0 {
panic("Stack is empty!")
}
item := s.items[len(s.items)-1]
s.items = s.items[:len(s.items)-1]
return item
}
func (s *Stack) Peek() int {
if len(s.items) == 0 {
panic("Stack is empty!")
}
return s.items[len(s.items)-1]
}
func (s *Stack) IsEmpty() bool {
return len(s.items) == 0
}
func (s *Stack) Size() int {
return len(s.items)
}
Мы использовали срез для хранения элементов стека. Метод
Push
добавляет элемент на верх стека, метод Pop
извлекает его, а метод Peek
позволяет посмотреть верхний элемент без его извлечения. Также мы использовали проверку стека на наличие элементов.