-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStack.swift
More file actions
47 lines (32 loc) · 764 Bytes
/
Stack.swift
File metadata and controls
47 lines (32 loc) · 764 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import UIKit
public struct Stack<Element> {
private var storage: [Element] = []
public init() { }
public mutating func push(_ element: Element) {
storage.append(element)
}
@discardableResult
public mutating func pop() -> Element? {
storage.popLast()
}
}
extension Stack: CustomDebugStringConvertible {
public var debugDescription: String {
"""
----top----
\(storage.map { "\($0)" }.reversed().joined(separator: "\n"))
-----------
"""
}
}
var stack = Stack<Int>()
stack.push(1)
stack.push(9)
stack.push(8)
stack.push(7)
print(stack)
if let poppedElement = stack.pop() {
assert(7 == poppedElement)
print("Popped: \(poppedElement)")
}
print(stack)