don't stop believing

Stack - 스택 본문

Golang/Basic

Stack - 스택

Tongchun 2019. 5. 15. 18:43

자료구조 중 스택입니다.
Stack과 Queue는 항상 같이 설명됩니다.

 

https://en.wikipedia.org/wiki/Stack_(abstract_data_type)

 

Stack (abstract data type) - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Simple representation of a stack runtime with push and pop operations. In computer science, a stack is an abstract data type that serves as a collection of elements, with two principal

en.wikipedia.org

Stack에서 중요한 개념은 LIFO (Last-In, First-Out) 입니다. 가장 마지막에 들어간 데이터가 가장 처음 나오게 됩니다.

Stack에서는 Push, Pop, Peek이 있으며 아래 코드에서 개념을 확인할 수 있습니다.

Go로 구현된 코드입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package main
import "fmt"
// StackItem . StackItem .
type StackItem struct {
item interface{}
next *StackItem
}
// Stack StackItem Stack .
type Stack struct {
sp *StackItem // Stack .
depth uint64 // Stack .
}
// Stack .
func New() *Stack {
var stack *Stack = new(Stack)
stack.depth = 0
return stack
}
// Stack .
func (stack *Stack) Push(item interface{}) {
stack.sp = &StackItem{item: item, next: stack.sp}
stack.depth++
}
// Stack .
// .
func (stack *Stack) Pop() interface{} {
if stack.depth > 0 {
item := stack.sp.item
stack.sp = stack.sp.next
stack.depth--
return item
}
return nil
}
// Stack .
// .
func (stack *Stack) Peek() interface{} {
if stack.depth > 0 {
return stack.sp.item
}
return nil
}
func main() {
var stack *Stack = New()
stack.Push(10)
stack.Push(20)
stack.Push(30)
stack.Push(40)
stack.Push(50)
// . (LIFO)
for i := 5; i > 0; i-- {
item := stack.Pop()
fmt.Println(item)
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Stack은 Queue와 같이 이해하면 좋습니다.