循环队列实现

前端之家收集整理的这篇文章主要介绍了循环队列实现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

循环队列

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

代码实现

我们现在加上如下条件:
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="/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="/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="/tag/tianjia/" target="_blank" class="keywords">添加</a>value,<a href="/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>

猜你在找的程序笔记相关文章