编写一个非循环队列,用python
时间: 2023-07-18 15:12:22 浏览: 97
好的,以下是一个基于Python列表实现的非循环队列的示例代码:
```python
class Queue:
def __init__(self):
self.items = []
def is_empty(self):
return not bool(self.items)
def enqueue(self, item):
self.items.append(item)
def dequeue(self):
return self.items.pop(0)
def size(self):
return len(self.items)
```
以上代码中,我们定义了一个名为Queue的类,其中包含以下方法:
- `__init__()`: 类的初始化方法,创建一个空列表 `items` 作为队列的存储空间。
- `is_empty()`: 判断队列是否为空,如果队列为空则返回 True,否则返回 False。
- `enqueue(item)`: 入队操作,将元素 `item` 添加到队列的末尾。
- `dequeue()`: 出队操作,从队列的头部删除一个元素并返回该元素。
- `size()`: 返回队列的当前大小。
通过使用列表实现队列,我们能够方便地进行入队和出队操作,并且避免了循环队列可能出现的数组越界等问题。
相关问题
用Python写一个循环队列
### 回答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实现循环队列的简单示例代码,希望能对你有所帮助。
编写一个循环队列 取队头元素
循环队列是一种特殊的队列,它可以将队列头和队列尾相连形成一个环形队列,可以有效地利用存储空间,并且可以避免队列头和队列尾的频繁移动。
以下是一个简单的循环队列的实现,包含了取队头元素的操作:
```python
class CircularQueue:
def __init__(self, capacity):
self.capacity = capacity
self.front = 0
self.rear = 0
self.size = 0
self.queue = [None] * capacity
def is_empty(self):
return self.size == 0
def is_full(self):
return self.size == self.capacity
def enqueue(self, data):
if self.is_full():
raise Exception("Queue is full")
self.queue[self.rear] = data
self.rear = (self.rear + 1) % self.capacity
self.size += 1
def dequeue(self):
if self.is_empty():
raise Exception("Queue is empty")
data = self.queue[self.front]
self.queue[self.front] = None
self.front = (self.front + 1) % self.capacity
self.size -= 1
return data
def get_front(self):
if self.is_empty():
raise Exception("Queue is empty")
return self.queue[self.front]
```
上述实现中,使用了一个数组来存储队列元素,同时记录了队列的容量、队头、队尾、队列大小等信息。取队头元素的操作只需要返回队头元素即可,具体实现可以参考上述代码中的 get_front 方法。
阅读全文