美文网首页
swift使用数组实现队列的push和pop

swift使用数组实现队列的push和pop

作者: 黑刀秋水 | 来源:发表于2018-03-19 13:57 被阅读0次
    //定义的异常处理类型
    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
    

    相关文章

      网友评论

          本文标题:swift使用数组实现队列的push和pop

          本文链接:https://www.haomeiwen.com/subject/oatpqftx.html