用Python写一个循环队列
时间: 2023-09-16 13:05:19 浏览: 97
### 回答1:
我可以为你提供一个简单的Python程序来实现循环队列:class Queue: def __init__(self, capacity): self.capacity = capacity self.queue = [None] * capacity self.head = 0 self.tail = 0 def is_empty(self): return self.head == self.tail def is_full(self): return (self.tail + 1) % self.capacity == self.head def enqueue(self, data): if self.is_full(): return False self.queue[self.tail] = data self.tail = (self.tail + 1) % self.capacity return True def dequeue(self): if self.is_empty(): return False data = self.queue[self.head] self.head = (self.head + 1) % self.capacity return data queue = Queue(5) queue.enqueue(1) queue.enqueue(2) queue.enqueue(3) print(queue.dequeue()) # 1 print(queue.dequeue()) # 2 print(queue.dequeue()) # 3
### 回答2:
循环队列是一种基于数组实现的队列数据结构,在队列满时可以通过循环利用未使用的数组空间来实现入队操作。
以下是使用Python语言编写一个循环队列的示例代码:
```python
class CircularQueue:
def __init__(self, k):
self.size = k
self.queue = [None] * self.size
self.front = -1
self.rear = -1
def enqueue(self, value):
if self.is_full():
print("队列已满,无法入队")
elif self.is_empty():
self.front = 0
self.rear = 0
self.queue[self.rear] = value
else:
self.rear = (self.rear + 1) % self.size
self.queue[self.rear] = value
def dequeue(self):
if self.is_empty():
print("队列为空,无法出队")
elif self.front == self.rear:
value = self.queue[self.front]
self.front = -1
self.rear = -1
return value
else:
value = self.queue[self.front]
self.front = (self.front + 1) % self.size
return value
def is_empty(self):
return self.front == -1 and self.rear == -1
def is_full(self):
return (self.rear + 1) % self.size == self.front
def display(self):
if self.is_empty():
print("队列为空")
else:
i = self.front
while i != self.rear:
print(self.queue[i])
i = (i + 1) % self.size
print(self.queue[self.rear])
```
以上代码定义了一个`CircularQueue`类,使用了一个长度为`k`的列表`queue`来实现循环队列。其中,`front`指向队列的第一个元素,`rear`指向队列的最后一个元素。`enqueue()`方法用于入队操作,`dequeue()`方法用于出队操作。通过`is_empty()`和`is_full()`方法判断队列是否为空或者已满。`display()`方法用于打印队列中的所有元素。
可以使用以下代码进行测试:
```python
q = CircularQueue(5)
q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
q.enqueue(4)
q.enqueue(5)
q.enqueue(6) # 队列已满,无法入队
q.display() # 输出:1 2 3 4 5
q.dequeue()
q.dequeue()
q.display() # 输出:3 4 5
```
这样,我们就成功地使用Python实现了一个循环队列。
### 回答3:
循环队列也称为环形队列,是一种特殊的队列数据结构,其特点是队尾指针可以在队列的末尾和队列的开头之间循环。以下是用Python实现循环队列的代码:
```python
class CircularQueue:
def __init__(self, capacity):
self.capacity = capacity
self.queue = [None] * capacity
self.front = self.rear = -1
def is_empty(self):
return self.front == -1
def is_full(self):
return (self.rear + 1) % self.capacity == self.front
def enqueue(self, item):
if self.is_full():
print("队列已满")
elif self.is_empty():
self.front = self.rear = 0
self.queue[self.rear] = item
else:
self.rear = (self.rear + 1) % self.capacity
self.queue[self.rear] = item
def dequeue(self):
if self.is_empty():
print("队列为空")
elif self.front == self.rear:
item = self.queue[self.front]
self.front = self.rear = -1
return item
else:
item = self.queue[self.front]
self.front = (self.front + 1) % self.capacity
return item
def display(self):
if self.is_empty():
print("队列为空")
elif self.rear >= self.front:
for i in range(self.front, self.rear + 1):
print(self.queue[i], end=" ")
print()
else:
for i in range(self.front, self.capacity):
print(self.queue[i], end=" ")
for i in range(0, self.rear + 1):
print(self.queue[i], end=" ")
print()
```
该循环队列的核心思想是使用一个固定大小的列表(capacity)来存储队列元素,同时维护两个指针front和rear分别指向队列的头部和尾部。
其中,is_empty()和is_full()函数用于判断队列是否为空和是否已满。enqueue(item)函数用于入队操作,如果队列已满则打印提示信息,否则将元素添加到队尾。dequeue()函数用于出队操作,如果队列为空则打印提示信息,否则返回队头元素并将front指针后移。display()函数用于打印队列元素,如果队列为空则打印提示信息,否则按顺序打印队列中的元素。
以上是用Python实现循环队列的简单示例代码,希望能对你有所帮助。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)