struct Stack<T> {
private var items: [T] = []
mutating func push(_ item: T) {
items.append(item)
}
mutating func pop() -> T? {
return items.popLast()
}
func peek() -> T? {
return items.last
}
var isEmpty: Bool {
return items.isEmpty
}
var count: Int {
return items.count
}
func printStack() {
print("Current Stack (top to bottom):")
for item in items.reversed() {
print(item)
}
}
}
var stringStack = Stack<String>()
stringStack.push("Swift")
stringStack.push("C")
stringStack.push("C++")
stringStack.push("Java")
print("Top: \(stringStack.peek() ?? "Empty")")
print("Popped: \(stringStack.pop() ?? "Empty")")
stringStack.printStack()
/*
run:
Top: Java
Popped: Java
Current Stack (top to bottom):
C++
C
Swift
*/