//定义的异常处理类型
enum QueueError: Error {
case QueueIsEmpty
case QueueIsFull
}
class Queue: NSObject {
var array:Array<Int> //存储数据
var font:Int //队列头部
var rear:Int //队列尾部
var size:Int //队列长度
//重载构造函数init,传入需要创建的队列大小
init(_ size: Int) {
self.array = Array(repeating:0, count: size)
self.font = 0
self.rear = -1
self.size = 0
super.init()
}
//添加数据到队列中
public func push(_ addData: Int) throws {
if self.size >= self.array.count {
throw QueueError.QueueIsFull
}
if self.rear == self.array.count - 1 {
self.rear = -1
}
self.rear += 1
self.array[self.rear] = addData
self.size += 1
}
//删除数据到队列中
public func pop() throws -> Int {
if self.size == 0 {
throw QueueError.QueueIsEmpty
}
let data = self.array[self.font]
self.font += 1
if self.font == self.array.count {
self.font = 0
}
self.size -= 1
return data
}
//队列是否为空
public func isEmpty() -> Bool {
return self.size == 0
}
//队列是否已满
public func isFull() -> Bool {
return self.size == self.array.count
}
}
方法调用
//初始化,5个长度的队列
let queue1 = Queue(5)
do {
//向队列中添加数据
try queue1.push(10)
try queue1.push(20)
try queue1.push(30)
try queue1.push(40)
try queue1.push(50)
//队列长度为5,会导致异常,
try queue1.push(60)
} catch QueueError.QueueIsFull {
print("队列已满")
} catch {
}
print("queue is empty:\(queue1.isEmpty())")
print("queue is full:\(queue1.isFull())")
do {
//取出队列中的数据
try print(queue1.pop())
try print(queue1.pop())
try print(queue1.pop())
try print(queue1.pop())
try print(queue1.pop())
try print(queue1.pop())
} catch QueueError.QueueIsEmpty{
print("队列为空")
} catch {
}
print("queue is empty:\(queue1.isEmpty())")
print("queue is full:\(queue1.isFull())")
执行结果:
队列已满 //这行输出是执行 try queue1.push(60)触发的异常
queue is empty:false
queue is full:true
10
20
30
40
50
队列为空
queue is empty:true
queue is full:false
网友评论