Stack은 놀랍도록 많은 양의 Applications에서 사용하는 간단한 data structure이다.
public struct Stack<Element> {
private var storage: [Element] = []
public init() { }
// 배열을 받아서 Stack으로 전환
public init(_ elements: [Element]) {
storage = elements
}
public mutating func push(_ element: Element) {
storage.append(element)
}
public mutating func pop() -> Element? {
storage.popLast()
}
// 스택의 마지막 요소 확인하기 (stack.isEmpty의 전초)
public func peek() -> Element? {
storage.last
}
public var isEmpty: Bool {
peek() == nil
}
}
// array literal data로 초기화 할 수 있게 설정
extension Stack: ExpressibleByArrayLiteral {
public init(arrayLiteral elements: Element...) {
storage = elements
}
}
// stack을 출력할때 아래와 같이 출력되게 설정
extension Stack: CustomStringConvertible {
public var description: String {
"Top: \(storage.map { "\($0)"}.reversed().joined(separator: "")) : Bottom"
}
}
public func printInReverse<T>(_ array: [T]) {
var stack: Stack<T> = Stack()
for value in array {
stack.push(value)
}
while let value = stack.pop() {
print(value)
}
}
pubilc func checkBalancedParentheses(_ string: String) -> Bool {
var stack: Stack<String> = Stack()
for value in string {
if value == "(" {
stack.push("+")
} else if value == ")" {
if stack.isEmpty {
return false
} else {
stack.pop()
}
}
}
return stack.isEmpty
}
let array = ["a","b","c","d"]
var stack2 = Stack(array)
var stack3: Stack = [1,2,3,4,5]
var stack4: Stack = ["A","B"]
var stack5: Stack = ["s",1,nil] as Stack<Any?>
stack3
stack3.reversdOrder()
print(stack2)
print(stack3)
print(stack4)
print(stack5)
Top: d c b a : Bottom
Top: 5 4 3 2 1 : Bottom
Top: B A : Bottom
Top: nil Optional(1) Optional("s") : Bottom
제가 학습한 내용을 요약하여 정리한 것입니다. 내용에 오류가 있을 수 있으며, 어떠한 피드백도 감사히 받겠습니다.
감사합니다.