class Stack<T> {
private val elements = mutableListOf<T>()
fun push(item: T) = elements.add(item)
fun pop(): T? = if (elements.isNotEmpty()) elements.removeAt(elements.size - 1) else null
fun peek(): T? = elements.lastOrNull()
fun isEmpty() = elements.isEmpty()
fun size() = elements.size
override fun toString() = elements.toString()
}
fun main() {
val stack = Stack<Int>()
stack.push(10)
stack.push(20)
stack.push(30)
stack.push(40)
println("Top element: ${stack.peek()}")
println("Popped element: ${stack.pop()}")
println("Stack after pop: $stack")
}
/*
run:
Top element: 40
Popped element: 40
Stack after pop: [10, 20, 30]
*/