循环队列实现

循环队列

循环队列主要是区别于固定队列
固定队列就是一个不限长的数组,入队就是在数组的后面添加一个新元素,出队就是在数组的前面移除一个元素。相对于队首和队尾的位置再不断的向后移动,如果队首和队尾的指针重叠了则代表队列为空。
循环队列则是一个固定长度的数组,另外定义两个指针来表示队首队尾,循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。

代码实现

我们现在加上如下条件:
1.所有的值都在 0 至 1000 的范围内;
1.操作数将在 1 至 1000 的范围内;
1.请不要使用内置的队列库。
需要实现如下方法
1.CircularQueue(k): 构造器,设置队列长度为 k 。
1.front: 从队首获取元素。如果队列为空,返回 -1 。
1.rear: 获取队尾元素。如果队列为空,返回 -1 。
1.en_queue(value): 向循环队列插入一个元素。如果成功插入则返回真。
1.de_queue(): 从循环队列中删除一个元素。如果成功删除则返回真。
1.is_empty(): 检查循环队列是否为空。
1.is_full(): 检查循环队列是否已满。

def is_empty(self):
    """
    检查循环队列是否为空。
    :rtype: bool
    """
    return self.head == -1

def is_full(self):
    """
    检查循环队列是否已满。
    :rtype: bool
    """
    return -1 not in self.storage

def front(self):
    """
    <a href="https://www.f2er.com/tag/huoqu/" target="_blank" class="keywords">获取</a>队首元素
    :rtype: int
    """
    if self.is_empty():
        return -1

    return self.storage[self.head]

def rear(self):
    """
    <a href="https://www.f2er.com/tag/huoqu/" target="_blank" class="keywords">获取</a>队尾元素
    :rtype: int
    """
    if self.is_empty():
        return -1

    return self.storage[self.tail]

def de_queue(self):
    """
    出队,移除队首元素,移除成功返回true,否则返回false
    :rtype: bool
    """
    if self.is_empty():
        return False

    if self.tail == self.head:
        self.storage[self.tail] = -1
        self.head = self.tail = -1
        return True

    self.storage[self.head] = -1
    self.head = (self.head + 1) % self.size
    return True 

def en_queue(self,value):
    """
    入队,在队列的队尾<a href="https://www.f2er.com/tag/tianjia/" target="_blank" class="keywords">添加</a>value,<a href="https://www.f2er.com/tag/tianjia/" target="_blank" class="keywords">添加</a>成功返回true,否则返回false
    :type value: int
    :rtype: bool
    """
    if self.is_full():
        return False

    if self.is_empty():
        self.head = self.tail = 0
        self.storage[self.tail] = value
        return True

    self.tail = (self.tail + 1) % self.size
    self.storage[self.tail] = value
    return True</code></pre>

相关文章

这个问题和curl无法访问https资源是类似的,现在curl可以访问https资源,但是使用pecl安装扩展的时候不行...
在浏览器输入chrome://flags/回车,找到Omnibox UI Hide Steady-State URL Scheme and Trivial Subdoma...
方法一: 我们都知道Ubuntu有一个专门用来安装软件的工具apt,我们可以用它来全自动安装arm-linux-gcc。...
中文的windows下的cmd默认使用GBK的编码,敲代码时,页面使用的是UTF-8(65001),而powershell控制台默认...
提示错误: arm-linux-gcc:Command not found PATH里有/usr/oca/arm/bin,但是make的时候,就是找不到 a...
我在Graph API开发中用的最多的测试工具就是Graph Explore,这个是微软开发的网页版的Graph API的测试工...