글 작성자: HEROHJK

스택은 가장 기본적인 자료구조중 하나입니다.


가장 늦게 삽입한 값이 가장 빨리 나오는 구조로써, 이를 후입선출이라 합니다.


A,B,C순서대로 입력을 하고 다시 출력을 하면 C,B,A가 나오는 구조입니다.


스위프트에서 구현할 스택에 필요한것들은 다음과 같습니다.


속성


stack -> 템플릿 배열입니다. 자료를 보관합니다.

length -> 스택이 가지고있는 값의 수를 나타냅니다. 사실 Swift에 자체적인 count가 있지만, 개인적으로 따로 만들어 씁니다.


연산


Push -> 스택에 값을 삽입할때 이용합니다. 스택의 크기가 반환됩니다.

Pop -> 스택의 맨 마지막 값을 제거하는 동시에 반환합니다.

IsEmpty -> 스택이 비어있는지를 확인합니다. 주로 반복작업을 할때 호출합니다.

GetLength -> 스택의 길이를 확인합니다.

Clear -> 스택을 초기화시킵니다.



클래스 다이어그램은 다음과 같습니다.




구현 내용은 다음과 같습니다.


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
70
71
72
73
74
75
76
77
78
79
80
81
82
import Swift
 
class Stack<T>{
    private var stack = [T]()       //배열로 이루어져 있다.
    private var length: Int = 0     //길이
    
    //선언과 동시에 스택 초기화
    public func Stack(){
        stack.removeAll(keepingCapacity: false)
        length=stack.count
    }
    
    //스택 값 삽입
    public func Push(_ object: T) -> Int{
        //0번째에 값을 삽입한다
        stack.insert(object, at: 0)
        //스택의 길이를 반환한다
        
        length=length+1
        
        return length
    }
    
    //스택 값 추출
    public func Pop() -> T{
        //마지막 값을 불러온다
        let object=stack[0]
        //마지막 값을 삭제한다
        stack.remove(at: 0)
        
        length=length-1
        
        return object
    }
    
    public func Clear() -> Int{
        //할당량까지 다 삭제한다.
        stack.removeAll(keepingCapacity: false)
        //길이를 0으로 초기화한다
        length=0
        
        return length
    }
    
    //스택이 비어있는지 확인
    public func IsEmpty() -> Bool{
        //길이가 0이하 라면 참을 반환
        if(length <= 0){
            return true
        }
            //아니라면 거짓을 반환
        else{
            return false
        }
    }
    
    //스택 길이 확인
    public func GetLength() -> Int{
        return length
    }
}
 
//아래부터는 테스트용 코드입니다.
var stack: Stack<Int> = Stack<Int>()
stack.Push(30)
stack.Push(20)
stack.Push(10)
print(stack.Pop())
stack.Push(25)
print(stack.Pop())
while stack.IsEmpty() == false {
    print(stack.Pop())
}
stack.Clear()
var count: Int=100
while count>0 {
    stack.Push(count)
    count=count-1
}
while stack.IsEmpty() == false{
    print(stack.Pop())
}
cs


반응형