美文网首页
循环buffer,基于数组实现pop和push

循环buffer,基于数组实现pop和push

作者: 派大星的博客 | 来源:发表于2018-09-03 10:09 被阅读10次

    1、 字符串中 "(" , ")" 是否匹配?

    func find(list: String) -> Bool {
        var num : Int = 0
        for str in list.characters {
            if str == "(" {
                num += 1
            } else if str == ")" {
                if num > 0 {
                    num -= 1
                } else {
                    return false
                }
            }
        }
        if num == 0 {
            return true
        }
        return false
    }
    
    let value = find(list: "(3+4)(5+6)(6(7+8)-8)((()))")
    

    2、循环buffer,基于数组,实现pop和push。

    循环队列判断空和满的条件.png
    class CircleBuff {
        private var size: Int = 0  // 真正size = size - 1
        private var start: Int = 0 // 将要pop的Index
        private var end: Int = 0   // 将要push的Index
        private var array: [Int?] = []
        
        init(size: Int) {
            self.size = size
            for _ in 0 ..< size {
                array.append(nil)
            }
        }
        
        func pop()-> Int? {
            print("")
            print("pop" )
            if isEmpty() {
                print("quene is empty!")
                return nil
            }
            let value = array[start]
            array[start] = nil
            start += 1
            if start >= size {
                start = 0
            }
            print(array)
            print("start:" + "\(start)" )
            print("end:" + "\(end)" )
            return value
        }
        
        func push(_ param: Int) {
            print("")
            print("push" )
            if isFull() {
                
                print("quene is full!")
                print("插入失败:" + "\(param)")
                return
            }
            array[end] = param
            end += 1
            if end >= size {
               end = 0
            }
            print(array)
            print("start:" + "\(start)" )
            print("end:" + "\(end)" )
        }
        
        func isEmpty() -> Bool {
            if start == end {
                return true
            }
            return false
        }
        
        func isFull() -> Bool {
            if  (end + 1) % size == start {
                return true
            }
            return false
        }
    }
    
    let buff = CircleBuff.init(size: 5)
    buff.push(1)
    buff.push(2)
    buff.push(3)
    buff.push(4)
    buff.push(5)
    buff.push(6)
    buff.push(7)
    buff.push(8)
    buff.push(9)
    buff.push(10)
    
    
    buff.pop()
    buff.pop()
    
    buff.push(11)
    buff.push(12)
    buff.push(13)
    
    

    相关文章

      网友评论

          本文标题:循环buffer,基于数组实现pop和push

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