117 lines
2.9 KiB
Swift
117 lines
2.9 KiB
Swift
class CircularQueue {
|
|
private var data: [Int]
|
|
private var front, rear, size : Int
|
|
|
|
init(size: Int){
|
|
self.front = -1
|
|
self.rear = -1
|
|
self.size = size
|
|
self.data = Array(repeating: 0, count: size)
|
|
}
|
|
|
|
func isEmpty() -> Bool {
|
|
return self.front == -1
|
|
}
|
|
|
|
func isFull() -> Bool {
|
|
return (self.rear + 1)%self.size == self.front
|
|
}
|
|
|
|
func info(){
|
|
if self.isEmpty(){
|
|
print("Empty!")
|
|
return
|
|
}
|
|
var i: Int = self.front
|
|
while true {
|
|
print("\(self.data[i]) ",terminator: " ")
|
|
if i == self.rear {
|
|
print()
|
|
break
|
|
}
|
|
i = (i+1)%self.size
|
|
}
|
|
}
|
|
|
|
func enqueue(to value: Int){
|
|
if self.isFull() {
|
|
print("Full!!!")
|
|
return
|
|
}
|
|
|
|
if self.isEmpty(){
|
|
self.front = 0
|
|
}
|
|
self.rear = (self.rear + 1)%self.size
|
|
self.data[self.rear] = value
|
|
}
|
|
|
|
func dequeue() -> Int? {
|
|
if self.isEmpty(){
|
|
return nil
|
|
}
|
|
let value: Int = self.data[self.front]
|
|
if(self.front == self.rear){
|
|
self.front = -1
|
|
self.rear = -1
|
|
}
|
|
else {
|
|
self.front = (self.front+1) % self.size
|
|
}
|
|
|
|
return value
|
|
}
|
|
|
|
func peek() -> Int? {
|
|
if self.isEmpty(){
|
|
return nil
|
|
}
|
|
return self.data[self.front]
|
|
}
|
|
}
|
|
|
|
let cirQueue: CircularQueue = CircularQueue(size: 10)
|
|
var exitFlag: Bool = true
|
|
|
|
while exitFlag {
|
|
print("명령어를 입력하세요 (enqueue [값], dequeue, peek, info, exit):")
|
|
if let input = readLine() {
|
|
let components = input.split(separator: " ")
|
|
let order = String(components.first ?? "")
|
|
|
|
switch order {
|
|
case "enqueue" :
|
|
if components.count == 2, let value = Int(components[1]) {
|
|
cirQueue.enqueue(to: value)
|
|
print("\(value) enqueue!")
|
|
}
|
|
else {
|
|
print("enqueue 명령어 뒤에 공백에 이어서 숫자를 입력해야합니다.")
|
|
}
|
|
case "dequeue" :
|
|
if let value = cirQueue.dequeue(){
|
|
print("\(value) dequeue!!")
|
|
}
|
|
else {
|
|
print("Empty!!")
|
|
}
|
|
case "peek" :
|
|
if let value = cirQueue.peek(){
|
|
print("\(value) peek!!")
|
|
}
|
|
else {
|
|
print("Empty!!")
|
|
}
|
|
case "info" :
|
|
cirQueue.info()
|
|
case "exit" :
|
|
exitFlag = false
|
|
print("Exit!!!")
|
|
default :
|
|
print("제대로 된 명령어를 입력하세요")
|
|
}
|
|
}
|
|
else {
|
|
print("제대로 입력해주세요")
|
|
}
|
|
} |