Files
dataStructures/stack.go
T
2026-04-04 21:03:11 -04:00

118 lines
1.7 KiB
Go

package main
import (
"errors"
"fmt"
)
type Stack[T any] struct {
capasity int
container []T
}
func (s *Stack[T]) push(value T) {
if s.capasity > 0 && (len(s.container) >= s.capasity) {
panic("Error max capasity exeded")
}
s.container = append(s.container, value)
}
func (s *Stack[T]) pop() (T, error) {
var zero T
if len(s.container) <= 0 {
return zero, errors.New("Empty Stack")
}
last := s.container[len(s.container)-1]
s.container = s.container[:len(s.container)-1]
return last, nil
}
func (s *Stack[T]) clear() {
s.container = []T{}
}
func (s *Stack[T]) peek() T {
return s.container[len(s.container)-1]
}
func (s *Stack[T]) first() T {
return s.container[0]
}
func StackFixed[T any](value int) *Stack[T] {
return &Stack[T]{
capasity: value,
container: make([]T, 0, value),
}
}
func (s *Stack[T]) setSize(value int) {
s.capasity = value
}
func main() {
testFixedStack()
}
func testFixedStack() {
fixedStack := StackFixed[int](3)
fixedStack.push(1)
fixedStack.push(2)
fixedStack.push(3)
fixedStack.pop()
fixedStack.push(4)
// fixedStack.push(5)
// fixedStack.push(6)
fmt.Printf("fixedStack: %v\n", fixedStack.container)
}
func testStack() {
que := Stack[int]{}
que.container = append(que.container, 1, 2, 4, 5)
fmt.Printf("%v\n", que.container)
que.push(6)
x, y := que.pop()
fmt.Printf("%v %v\n", x, y)
fmt.Printf("%v\n", que.container)
fmt.Printf("after pop %v\n", que.container)
que.clear()
fmt.Printf("ceared: %v\n", que.container)
que.push(7)
que.push(8)
que.push(9)
que.push(10)
fmt.Printf("peek: %v\n", que.peek())
fmt.Printf("first: %v\n", que.first())
words := Stack[string]{}
words.push("a")
words.push("b")
words.push("c")
words.push("e")
fmt.Printf("words: %v\n", words)
}