设计一个带头尾指针的循环单链表,模拟队列,给出入队出队代码
时间: 2024-10-09 18:14:19 浏览: 48
C只有尾指针的循环队列(数据结构作业)
设计一个带头结点的循环单链表作为队列,我们通常会有一个头节点(表示队列的第一个元素),一个尾节点(指向最后一个元素),并且尾节点的下一个节点始终是指向头节点,形成一个环形结构。这样就可以实现队列的特性,即后进先出(LIFO, Last In First Out)。
下面是基本的实现:
```python
class Node:
def __init__(self, data=None):
self.data = data
self.next = None
class CircularQueue:
def __init__(self, capacity):
self.front = self.rear = Node() # 初始化头尾都是空节点
self.capacity = capacity
self.size = 0
# 入队操作
def enqueue(self, data):
if self.is_full():
print("Queue is full")
return
new_node = Node(data)
if self.rear == self.front:
self.rear.next = self.front
else:
self.rear.next = self.front.next
self.rear = new_node
self.rear.next = self.front # 将新节点链接到头部形成环
self.size += 1
# 出队操作
def dequeue(self):
if self.is_empty():
print("Queue is empty")
return
if self.front == self.rear:
temp = self.front
self.front = None
self.rear = None
else:
temp = self.front
self.front = self.front.next
self.size -= 1
return temp.data
# 检查队列是否为空
def is_empty(self):
return self.size == 0 and self.front == self.rear
# 检查队列是否已满
def is_full(self):
return self.size == self.capacity
# 示例
queue = CircularQueue(5)
queue.enqueue(1)
queue.enqueue(2)
print(queue.dequeue()) # 输出: 1
```
阅读全文