Dog foot print

[Swift] Stack 만들기 본문

IOS/Swift

[Swift] Stack 만들기

개 발자국 2021. 3. 17. 15:30

서론 : 

 

기존에 자바스크립트에서 Stack강의에 자세한 설명이 존재하기 때문에 자료구조에 대한 정의 및 함수는 이번 포스트에서 다루지 않았습니다. 

 

코드 :

 

class Stack<T> {
    private var __stack : [T] = [];
    private var count : Int = 0;
    private var maxCount : UInt = UInt.max;
    
    init(count : Int) {
        maxCount = UInt(count)
    }
    
    func push(_ element : T){
        
        guard count != maxCount else {
            print("over flow danger")
            return ;
        }
        
        __stack.append(element)
        count += 1;
    }
    
    func peek() -> T{
        guard count != 0 else {
            return "empty" as! T
        }
        
        return __stack[count - 1]
    }
    
    func pop() -> T{
        
        guard count != 0 else {
            return "empty" as! T
        }
        
        let temp = __stack.remove(at: count - 1);
        count -= 1;
        return temp;
    }
    
    func size() -> Int{
        return count
    }
    
}

let stack = Stack<Any>(count: 10);

위의 코드에서는 generic을 사용 하였기 때문에, 다른 타입의 값이 전달되어도, 사용 가능하다. 이는 사용 사례에 따라 장점이 될 수도 단점이 될 수 있다. 아래 코드에서는 같은 데이터 타입끼리만 넣을 수 있도록 타입 체크를 한 코드이다. 

 


class Stack<T> {
    private var __stack : [Any] = [];
    private var count : Int = 0;
    private var maxCount : UInt = UInt.max;
    
    init(count : Int) {
        maxCount = UInt(count)
        
    }
    
    func push(_ element : Any){
        
        guard count != maxCount else {
            print("over flow danger")
            return ;
        }
        
        if count != 0 {
            
            if type(of : __stack[0]) != type(of: element){
                print("type error !");
                return;
            }
                
        }
        
        __stack.append(element)
        count += 1;
    }
    
    func peek() -> Any{
        guard count != 0 else {
            return "empty" as! T
        }
        
        return __stack[count - 1]
    }
    
    func pop() -> Any{
        
        guard count != 0 else {
            return "empty" as! T
        }
        
        let temp = __stack.remove(at: count - 1);
        count -= 1;
        return temp;
    }
    
    func size() -> Int{
        return count
    }
    
}

반응형

'IOS > Swift' 카테고리의 다른 글

[SWIFT] Set 집합  (0) 2021.07.01
[SWIFT] 문자열 보간법과 트리플 쿼우팅  (0) 2021.06.30
[SWIFT] 기본 자료형[2]  (0) 2021.06.29
[SWIFT] 기본 자료형 및 숫자 타입  (0) 2021.06.29
[swift] 변수 사용하기  (0) 2021.06.28
Comments