编写两个程序,实现顺序队列和链队列的各种基本运算,并在此基础上设计一个主程序完成以下功能: (1)初始化队列S。 (2)进队列操作 (3)出队列操作 (4)取队列顶元素
时间: 2024-10-11 15:17:27 浏览: 26
在编写顺序队列和链队列的基本操作之前,我们需要先了解它们各自的数据结构和基本原理。
**顺序队列(Array Queue)**:
- 数据存储在一个数组中,通常使用双端指针(front 和 rear)来表示队头和队尾位置。
- 进队操作(enqueue):将元素添加到rear位置,更新rear。
- 出队操作(dequeue):如果队列非空,移除front元素并更新front。
- 取队首元素(get front):返回front指向的元素,但不改变队列状态。
**链队列(Linked List Queue)**:
- 使用单向链表,每个节点包含数据和指向下一个节点的引用。
- 进队操作:在链表尾部添加新节点。
- 出队操作:删除并返回链表头部节点,然后更新链表头。
- 取队首元素(get front):直接返回链表头部节点的数据,无需移动节点。
下面是一个简单的Python示例,实现了这两个队列以及主程序的功能:
```python
# 定义顺序队列
class ArrayQueue:
def __init__(self, capacity):
self.capacity = capacity
self.queue = [None] * capacity
self.front = -1
self.rear = -1
# 添加元素
def enqueue(self, item):
if (self.rear + 1) % self.capacity == self.front:
print("Queue is full")
else:
self.rear = (self.rear + 1) % self.capacity
self.queue[self.rear] = item
# 删除元素
def dequeue(self):
if self.is_empty():
print("Queue is empty")
else:
item = self.queue[self.front]
self.queue[self.front] = None
self.front = (self.front + 1) % self.capacity
return item
# 取队首元素
def get_front(self):
if self.is_empty():
print("Queue is empty")
else:
return self.queue[self.front]
def is_empty(self):
return self.front == -1
# 主程序
def main():
s = ArrayQueue(5)
# 初始化队列
s.enqueue("A")
s.enqueue("B")
s.enqueue("C")
s.enqueue("D")
# 进队列操作
s.enqueue("E")
# 出队列操作
print("Popped element:", s.dequeue())
# 取队首元素
print("Front element:", s.get_front())
if __name__ == "__main__":
main()
```
对于链队列,实现类似但不需要考虑容量限制。同样的操作可以在链表队列上执行。以上代码仅为演示,实际应用中可能需要处理异常情况和其他细节。
阅读全文