📅  最后修改于: 2023-12-03 15:23:03.633000             🧑  作者: Mango
该问题需要我们实现一个基于链表的队列数据结构,具有入队、出队、打印队列元素等基本操作。
下面是原问题描述:
Implement a Queue using Linked List and make it Circular Queue.
For Detailed problem statement, refer ISRO: CS 2014 question 43
根据问题描述,我们需要实现一个队列数据结构,使用链表来实现,并且需要具有循环队列的特性。
为了实现基于链表的队列,我们可以使用链表节点来表示队列的元素,每个节点保存一个数据值和指向下一个元素的指针。同时,使用头指针(指向队头)和尾指针(指向队尾)来标识队列的位置。
对于循环队列,我们需要处理队列满和队列空的情况。队列满的条件是队尾的下一个位置为队头,因为队列是循环的。队列空的条件是头指针等于尾指针。
下面是使用 Python 语言实现的带有循环队列特性的链表队列:
class Node:
def __init__(self, data=None, next=None):
self.data = data
self.next = next
class QueueUsingLinkedList:
def __init__(self):
self.front = None
self.rear = None
def is_empty(self):
return self.front is None
def enqueue(self, item):
new_node = Node(item)
if self.is_empty():
self.front = self.rear = new_node
else:
self.rear.next = new_node
self.rear = new_node
self.rear.next = self.front
def dequeue(self):
if self.is_empty():
raise Exception("Queue is empty!")
item = self.front.data
if self.front == self.rear:
self.front = self.rear = None
else:
self.front = self.front.next
self.rear.next = self.front
return item
def print_queue(self):
if self.is_empty():
print("Queue is empty!")
else:
curr_node = self.front
while curr_node.next != self.front:
print(curr_node.data, end=" ")
curr_node = curr_node.next
print(curr_node.data)
我们可以使用以下代码来测试我们的实现:
q = QueueUsingLinkedList()
q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
q.enqueue(4)
q.print_queue() # 1 2 3 4
q.dequeue()
q.print_queue() # 2 3 4
q.enqueue(5)
q.enqueue(6)
q.print_queue() # 2 3 4 5 6