SMALL
* 스택(Stack)과 큐(Queue)의 구조와 활용 *
* Queue *
큐와 스택은 데이터에 대한 개념
Swift에서는 따로 큐와 스택을 지원하지 않으면
Array 등을 이용해서 직접 구현 가능
먼저 들어온 값을 먼저 내보내는 구조
/*
<T>하나의 타입으로 국한되지 않고
타입에 유연하게 코드를 작성할 수 있는 기능입니다.
*/
struct Queue<T> {
private var queue: [T] = []
public var count: Int {
return queue.count
}
public var isEmpty: Bool {
return queue.isEmpty // .isEmpty를 사용하여 비었는지 안비었는지 확인
}
public mutating func enqueue(_ element: T) {
// 'enqueue' 대기열에 어떠한 사람?이 들어가는경우를 이야기합니다.
// 구현법 : element라는 파라미터가 T의 타입(공통)입니다.
// 'queue'에 '.append'를 해주면 뒤에 'element'가 붙게됩니다.
queue.append(element)
}
public mutating func dequeue() -> T? { // 현재 T는 빈 배열을 말하죠? 빈배열 일지 아닐지
// isEmpty 비었는지 아닌지 확인해주고
// 비었다면 nil을 리턴해주고
// 그렇지 않다면 queue에서 removeFirst 첫번째 사람을 제거해주고 그 사람을 리턴해주면 됩니다.
return isEmpty ? nil : queue.removeFirst()
}
}
// 예시 2
var queue = Queue<Int>()
queue.enqueue(10)
queue.enqueue(20)
queue.dequeue() // 10
'struct' 가 표현하는것은 내부의 있는 속성들을 감싸고 있는 틀을 의미하고,
<T>가 표현하고 있는 것은 '제네릭' 이라는 것입니다.
여기에는 A, B, C, D 아무거나 사용이 가능합니다.
단, 다음줄에서 보이는 배열의 문자와 통일해야합니다.
ex)
struct Queue<Int> {
private var queue: [Int] = []
이런식으로 두개의 타입이 일치해야합니다.
보통은 'T'를 많이 쓰는 편입니다.
'제네릭'은 하나의 타입으로 국한 되지 않고 타입에
유연하게 코드를 작성할 수 있는 기능을 말합니다.
* Stack *
먼저 들어온 값을 가장 마지막에 내보내는 구조
/*
<T> 하나의 타입으로 국한되지 않고
타입에 유연하게 코드를 작성할 수 있는 기능
*/
struct Stack<T> {
private var stack: [T] = []
public var count: Int {
return stack.count
}
public var isEmpty: Bool {
return stack.isEmpty
}
// 여기까지는 큐와 동일합니다.
/*
여기서부터는 enqueue 대신 push가 오고
push는 T 타입의 element라는 파라미터를 append로 넣어주는 형태가 됩니다.
*/
public mutating func push(_ element: T) {
stack.append(element)
}
/*
pop은 뒤에서부터 빼야하는데 "append" 라는것이 배열의 맨 뒤에 요소를 추가하는 것이기 때문에
pop은 맨 뒤에 있는 요소를 빼는 것 입니다.
*/
public mutating func pop() -> T? {
return isEmpty ? nil : stack.popLast() // isEmpty인지 본후 비었다면 pop을 해줄게 없고, 비어있지 않는다면 popLast를 해서 마지막것을 빼내줍니다.
}
}
var stack = Stack<Int>()
stack.push(10)
stack.push(20)
stack.pop() // 20
728x90
'IOS > Swift-Study' 카테고리의 다른 글
[Swift-Study] 기초 문법종합반 1주차 3일차 정리 - 객체 지향 (0) | 2024.03.12 |
---|---|
[Swift-Study] 기초 문법종합반 1주차 2일차 정리 - 배열, 세트, 딕셔너리 (0) | 2024.03.12 |
[Swift-Study] 기초 문법종합반 1주차 2일차 정리 - 옵셔널 (0) | 2024.03.12 |
[Swift-Study] 기초 문법종합반 1주차 1일차 정리 - 연산자, 조건문과 반복문 (2) | 2024.03.11 |
[Swift-Study] 기초 문법종합반 1주차 1일차 정리 - 데이터 타입 (0) | 2024.03.11 |