zoukankan      html  css  js  c++  java
  • 数据结构 循环队列 回顾练习

    循环链表的入队操作0(1) 出队操作0(1)

    #!/usr/bin/env python3
    
    class QueueUnderflow(ValueError):
            pass
    
    class CQueue(object):
            def __init__(self, init_len=8):
                    self.len = init_len
                    self._elems = [None] * init_len
                    self.head = 0
                    self.num = 0
    
            def is_empty(self):
                    return self.num == 0
    
            def is_full(self):
                    return self.num == self.len
    
            def peek(self):
                    if self.num == 0:
                            raise QueueUnderflow
                    e = self._elems[self.head]
                    return e
    
            def dequeue(self):
                    if self.num == 0:
                            raise QueueUnderflow
                    e = self._elems[self.head]
                    self.head = (self.head + 1) % self.len
                    self.num -= 1
                    return e
    
            def enqueue(self, elem):
                    if self.is_full():
                            self._extends()
                    self._elems[(self.head + self.num) % self.len] = elem
                    self.num += 1
    
            def _extends(self):
                    old_len = self.len
                    self.len = old_len * 2
                    new_elems = [None] * self.len
                    for i in range(old_len):
                            new_elems[i] = self._elems[(self.head + i) % old_len]
                    self._elems, self.head = new_elems, 0
    
            def bianli(self):
                    li = []
                    for i in range(self.num):
                            li.append(self._elems[(self.head+i) % self.len])
                    return li
    
    if __name__ == '__main__':
            cq = CQueue()
            for i in range(12):
                    cq.enqueue(i)
            print(cq.bianli())
            cq.dequeue()
            cq.dequeue()
            print(cq.bianli())
  • 相关阅读:
    Unit of Work
    OAuth做webapi认证
    Js数组
    UWP开发的一些思考
    表格行拖拽
    委托
    Git协作流程(转)
    全自动Web后门扫描(转)
    Gradle 2.0用户手册——总览(译)(转)
    面向对象之两大要领 (转)
  • 原文地址:https://www.cnblogs.com/xautxuqiang/p/6416543.html
Copyright © 2011-2022 走看看