定义一个包含学生信息(学号,姓名,成绩)的顺序队列和链队列,使其具有如下功能: (1) 初始化一个空队列; (2) 逐个输入学生信息并入队; (3) 出队,输出学号、姓名、成绩等信息; (4) 删除队列。 (5) 统计当前队列排队学生个数;
时间: 2023-05-24 19:05:08 浏览: 680
以下是Python语言的实现:
# 定义一个学生类
class Student:
def __init__(self, id, name, score):
self.id = id
self.name = name
self.score = score
# 定义一个顺序队列类
class SeqQueue:
def __init__(self):
self.queue = []
def is_empty(self):
return len(self.queue) == 0
def enqueue(self, s):
self.queue.append(s)
def dequeue(self):
if not self.is_empty():
return self.queue.pop(0)
else:
return None
def delete(self):
self.queue.clear()
def size(self):
return len(self.queue)
# 定义一个链队列节点类
class QueueNode:
def __init__(self, s):
self.data = s
self.next = None
# 定义一个链队列类
class LinkedQueue:
def __init__(self):
self.front = None
self.rear = None
def is_empty(self):
return self.front == None
def enqueue(self, s):
node = QueueNode(s)
if self.is_empty():
self.front = node
self.rear = node
else:
self.rear.next = node
self.rear = node
def dequeue(self):
if not self.is_empty():
node = self.front
self.front = node.next
if self.front == None:
self.rear = None
return node.data
else:
return None
def delete(self):
self.front = None
self.rear = None
def size(self):
count = 0
node = self.front
while node != None:
count += 1
node = node.next
return count
# 测试代码
if __name__ == '__main__':
s1 = Student(1, 'Tom', 80)
s2 = Student(2, 'Jerry', 90)
s3 = Student(3, 'Bob', 70)
q1 = SeqQueue()
q1.enqueue(s1)
q1.enqueue(s2)
q1.enqueue(s3)
print('当前队列共有', q1.size(), '个学生')
while not q1.is_empty():
s = q1.dequeue()
print('学号:', s.id, '姓名:', s.name, '成绩:', s.score)
q1.delete()
print('队列已删除')
s4 = Student(4, 'Lucy', 85)
s5 = Student(5, 'Lily', 95)
s6 = Student(6, 'Jack', 60)
q2 = LinkedQueue()
q2.enqueue(s4)
q2.enqueue(s5)
q2.enqueue(s6)
print('当前队列共有', q2.size(), '个学生')
while not q2.is_empty():
s = q2.dequeue()
print('学号:', s.id, '姓名:', s.name, '成绩:', s.score)
q2.delete()
print('队列已删除')
阅读全文