code refactoring

This commit is contained in:
2024-02-12 12:02:23 +01:00
parent cc06487b0a
commit 65b0c8bc0e
7 changed files with 51 additions and 32 deletions

View File

@@ -1,37 +1,33 @@
package internal
type Node[T any] struct {
Value T
}
type Stack[T any] struct {
Nodes []*Node[T]
count int
Elements []*T
count int
}
func NewStack[T any]() *Stack[T] {
return &Stack[T]{
Nodes: make([]*Node[T], 10),
Elements: make([]*T, 10),
}
}
func (s *Stack[T]) Push(val T) {
if s.count >= len(s.Nodes) {
Nodes := make([]*Node[T], len(s.Nodes)*2)
copy(Nodes, s.Nodes)
s.Nodes = Nodes
if s.count >= len(s.Elements) {
Elements := make([]*T, len(s.Elements)*2)
copy(Elements, s.Elements)
s.Elements = Elements
}
s.Nodes[s.count] = &Node[T]{Value: val}
s.Elements[s.count] = &val
s.count++
}
func (s *Stack[T]) Pop() *Node[T] {
func (s *Stack[T]) Pop() *T {
if s.count == 0 {
return nil
}
node := s.Nodes[s.count-1]
Element := s.Elements[s.count-1]
s.count--
return node
return Element
}
func (s *Stack[T]) IsEmpty() bool {