99 lines
2.4 KiB
Swift
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("제대로 입력해주세요")
|
|
}
|
|
} |