반응형
Stack (스택)
LIFO(Last In First Out) 데이터 구조를 따르며 나중에 입력된 것이 먼저 출력되는 구조를 가진다. 스택은 배열과 유사하지만, 개별 요소에 접근하기 위한 메소드가 좀 더 제한적이다. 또한 스택은 개별 요소에 접근하는 방법을 강하게 제한한 인터페이스를 제공한다. 스택에서 사용되는 가장 일반적인 구조는 배열 또는 연결 목록이며, 데이터 처리 성능 특성에 따라 결정된다. Swift는 collection 타입을 Array, Dictionary, Set 만 지원하기에 스택을 구현하고 싶다면 직접 구현해야한다.
- push () : 스택의 하단에 요소 추가
- pop () : 스택의 상다느이 요소를 삭제한 뒤 반환
- peek () : 스택의 상단 요소를 삭제하지 않고 반환
- count : 스택의 요소 수 반환
- isEmpty () : 스택에 포함된 요소가 없는 경우 true, 아니면 false 반환
- isFull () : 스택 크기가 지정되어있는 경우 가능. 스택이 가득 찼으면 true, 아니면 false 반환
struct Stack<T> {
private var elements = [T]()
public init() {}
public mutating func pop() -> T? {
return self.elements.popLast()
}
public mutating func push(element : T) {
self.elements.append(element)
}
public mutating func peek() -> T {
return self.elements.last
}
public func isEmpty : Bool {
return self.elemets.isEmpty
}
public var count : Int {
return self.elements.count
}
}
Queue (큐)
FIFO (First In First Out) 데이터 구조를 따르며 먼저 입력된 데이터가 먼저 출력되는 구조를 가진다. Queue는 입력된 순서대로 데이터를 처리할 때 보편적으로 활용되는 방법이며, 음식점에서 주문 계산에 사용하는 POS 시스템이 대표적이다.
- enqueue () : 큐의 맨 뒤에 새로운 요소 추가
- dequeue () : 큐의 첫 번째 요소를 제거한 뒤 반환
- peek () : 큐의 첫 번째 요소를 제거하지 않고 반환
- clear () : 큐를 요소를 전부 비움
- count : 큐에 속한 요소의 수를 반환
- isEmpty() : 큐가 비어있으면 true, 아니면 false 반환
- isFull() : 큐가 가득 차있으면 true, 아니면 false 반환
- capacity : 큐의 용량을 가져오거나 설정하기 위한 read/write 프로퍼티
- insert(_ : atIndex) : 큐의 특정 인덱스 위치에 요소 삽입
- removeAtIndex(_) :큐의 특정 인덱스 위치에 있는 요소 제거
struct Queue<T> {
private var data = [T]()
public init() {}
public mutating func dequeue() -> T? {
return data.removeFirst()
}
public func peek() -> T? {
return data.first
}
public mutating func enqueue(element: T) {
data.append(element)
}
public mutating func clear() {
data.removeAll()
}
public var count : Int {
return data.count
}
public var capacity : Int {
get {
return data.capacity
} set {
data.reserveCapacity(newValue)
}
}
public func isFull() -> Bool {
return count == data.capacity
}
public func isEmpty() -> Bool {
return data.isEmpty
}
}
반응형