Go 링크드 리스트를 사용한 스택

package main

import "log"

type Node struct {
	Data int
	Next *Node
}

type Stack struct {
	Top *Node
}

func InitStack() *Stack {
	stack := Stack{Top: nil}

	return &stack
}

func (s *Stack) PushStack(data int) {
	new_node := Node{Data: data, Next: s.Top}
	s.Top = &new_node
	log.Println("Push", s.Top.Data)
}

func (s *Stack) PopStack() {
	if s.Top == nil {
		return
	}

	data := s.Top.Data // 스택이 마지막으로 Top한 Node Data
	temp := s.Top      // 스택이 마지막으로 Top한 Node
	s.Top = s.Top.Next // 스택이 마지막으로 Top한 Node의 Next Node
	temp.Data = 0
	temp = nil // Free와 같은 것인데 nil로 초기화
	log.Println("Pop", data)
}

func (s *Stack) Empty() bool {
	if s.Top == nil {
		return true
	}
	return false
}

func main() {
	stack := InitStack()
	stack.PushStack(5)
	stack.PopStack()
	stack.PushStack(2)
	stack.PushStack(1)
	stack.PopStack()
	log.Println(stack.Empty())
	stack.PopStack()
	stack.PopStack()
	stack.PopStack()
	stack.PopStack()
	stack.PopStack()
	stack.PopStack()
	log.Println(stack.Empty())
	return
}


Go 링크드 리스트를 사용한 스택 1
왜 데이터 구조인가?

하지만 연결 리스트를 사용한다면… 어디서든 노드에서 값을 추가하고 제거할 수 있는 것으로 알고 있습니다.
스택을 사용한다면 중간에 데이터를 넣을 수 있는지 여부와는 관계가 없는 것 같습니다.