💬Что такое стек и как его реализовать с помощью 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 позволяет посмотреть верхний элемент без его извлечения. Также мы использовали проверку стека на наличие элементов.