栈和队列完成链队列的建立,实现链队列的入队出队操作,实现判断连队列是否为空,实现销毁链队列自己设计一组数据模拟入队列出队列
时间: 2024-11-13 17:41:53 浏览: 10
Java定义队列结构,并实现入队、出队操作完整示例
链队列是一种基于链表结构的先进先出(FIFO,First In First Out)的数据结构,它由两部分组成:队头(front)用于存放下一个将要出队的元素,而队尾(rear)则指向当前队列的最后一个元素位置。以下是使用链表实现链队列的基本步骤:
1. **创建链队列结构**:
- 定义一个节点类,包含值域和两个指针,分别指向前一个节点和下一个节点。
- 创建一个`Queue`类,包含队头、队尾指针以及一些辅助属性(如大小计数器)。
```python
class Node:
def __init__(self, data=None):
self.data = data
self.next = None
class Queue:
def __init__(self):
self.front = None
self.rear = None
self.size = 0
```
2. **入队(enqueue)操作**:
- 如果队列为空,将新节点设为队头和队尾。
- 否则,新节点的next指向前一个队尾,然后更新队尾。
```python
def enqueue(self, data):
new_node = Node(data)
if not self.rear:
self.front = new_node
self.rear = new_node
else:
self.rear.next = new_node
self.rear = new_node
self.size += 1
```
3. **出队(dequeue)操作**:
- 检查队列是否为空,如果空则返回错误。
- 更新队头指针,并删除原队头。
```python
def dequeue(self):
if not self.is_empty():
removed_data = self.front.data
if self.front == self.rear: # 队列仅剩一个元素
self.front = None
self.rear = None
else:
self.front = self.front.next
self.size -= 1
return removed_data
else:
return "Queue is empty"
```
4. **判断队列是否为空(is_empty)**:
- 判断队头是否为None。
```python
def is_empty(self):
return self.front is None
```
5. **销毁链队列(clear)**:
- 将队头和队尾都置为None,清除所有节点并减小size。
```python
def clear(self):
self.front = None
self.rear = None
self.size = 0
```
你可以使用这些基本方法来模拟链队列的操作。例如:
```python
q = Queue()
q.enqueue(1)
q.enqueue(2)
print(q.dequeue()) # 输出:1
print(q.is_empty()) # 输出:False
q.clear()
print(q.is_empty()) # 输出:True
```
阅读全文