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
}
}
반응형