2025-08-10 02:16:11 +09:00

99 lines
2.4 KiB
Swift

class Stack {
private var data: [Int]
private let maxSize: Int
private var top: Int
init(size: Int) {
self.maxSize = size
self.data = Array(repeating: 0, count: size)
self.top = -1
}
func isFull() -> Bool {
return self.top == self.maxSize - 1
}
func isEmpty() -> Bool {
return self.top == -1
}
func push(to value: Int) {
if isFull() {
print("스택 오버플로우! 더 이상 추가할 수 없습니다.")
return
}
self.top += 1
self.data[top] = value
}
func pop() -> Int? {
if isEmpty() {
return nil
}
let popValue = self.data[top]
self.top -= 1
return popValue
}
func peek() -> Int? {
if isEmpty() {
return nil
}
return self.data[top]
}
func info(){
if isEmpty() {
print("스택이 비어있습니다.")
return
}
print("스택목록 : ", terminator: "")
for i in 0...self.top {
print(self.data[i], terminator: " ")
}
print()
}
}
let stack: Stack = Stack(size: 10)
var exitFlag = true
while exitFlag {
print("명령어를 입력하세요 (push [값], pop, peek, info, exit):")
if let input = readLine(){
let components = input.split(separator: " ")
let order = String(components.first ?? "")
switch order {
case "push":
if components.count == 2, let value = Int(components[1]) {
stack.push(to: value)
print("\(value)를 push했습니다.")
} else {
print("push 명령어는 'push [숫자]' 형식으로 입력해야 합니다.")
}
case "pop":
if let popValue = stack.pop() {
print("Pop: \(popValue)")
} else {
print("스택이 비어있습니다.")
}
case "peek":
if let peekValue = stack.peek() {
print("Peek: \(peekValue)")
} else {
print("스택이 비어있습니다.")
}
case "info":
stack.info()
case "exit":
exitFlag = false
print("종료합니다")
default:
print("알 수 없는 명령어입니다.")
}
}
else{
print("제대로 입력해주세요")
}
}