8.银行排队叫号系统(*超星平台) 【功能要求】 模拟银行客户排队办理业务的过程:通过取号进队、排队等候、叫号服务、当前不排队,余下依次等待、下班等。 (1)基于循环队列 (2)基于链队列
时间: 2023-05-27 12:03:08 浏览: 51
基于循环队列实现银行排队叫号系统:
【代码实现】
```python
class Queue:
def __init__(self, capacity):
self.capacity = capacity
self.front = 0
self.rear = 0
self.size = 0
self.q_list = [None] * self.capacity
def is_empty(self):
return self.size == 0
def is_full(self):
return self.size == self.capacity
def enqueue(self, item):
if self.is_full():
return False
self.size += 1
self.q_list[self.rear] = item
self.rear = (self.rear + 1) % self.capacity
return True
def dequeue(self):
if self.is_empty():
return None
self.size -= 1
item = self.q_list[self.front]
self.front = (self.front + 1) % self.capacity
return item
class BankQueue:
def __init__(self):
self.queue = Queue(100)
self.current_number = 1
def get_number(self):
number = self.current_number
self.current_number += 1
return number
def enter_queue(self):
number = self.get_number()
if not self.queue.enqueue(number):
return False
return number
def call_number(self):
return self.queue.dequeue()
def is_empty(self):
return self.queue.is_empty()
def get_size(self):
return self.queue.size
```
【使用方法】
```python
queue = BankQueue()
# 手动取号进队
number1 = queue.enter_queue()
number2 = queue.enter_queue()
number3 = queue.enter_queue()
print(number1, number2, number3) # 输出 1 2 3
# 叫号服务
print(queue.call_number()) # 输出 1
print(queue.call_number()) # 输出 2
print(queue.call_number()) # 输出 3
# 当前不排队
print(queue.is_empty()) # 输出 True
# 余下依次等待
number4 = queue.enter_queue()
number5 = queue.enter_queue()
number6 = queue.enter_queue()
print(number4, number5, number6) # 输出 4 5 6
# 下班
print(queue.get_size()) # 输出 3
```
基于链队列实现银行排队叫号系统:
【代码实现】
```python
class Node:
def __init__(self, data):
self.data = data
self.next = None
class BankQueue:
def __init__(self):
self.front = None
self.rear = None
self.current_number = 1
def get_number(self):
number = self.current_number
self.current_number += 1
return number
def enter_queue(self):
number = self.get_number()
new_node = Node(number)
if self.rear is not None:
self.rear.next = new_node
self.rear = new_node
else:
self.front = new_node
self.rear = new_node
return number
def call_number(self):
if self.front is None:
return None
number = self.front.data
self.front = self.front.next
if self.front is None:
self.rear = None
return number
def is_empty(self):
return self.front is None
def get_size(self):
size = 0
current = self.front
while current is not None:
size += 1
current = current.next
return size
```
【使用方法】
```python
queue = BankQueue()
# 手动取号进队
number1 = queue.enter_queue()
number2 = queue.enter_queue()
number3 = queue.enter_queue()
print(number1, number2, number3) # 输出 1 2 3
# 叫号服务
print(queue.call_number()) # 输出 1
print(queue.call_number()) # 输出 2
print(queue.call_number()) # 输出 3
# 当前不排队
print(queue.is_empty()) # 输出 True
# 余下依次等待
number4 = queue.enter_queue()
number5 = queue.enter_queue()
number6 = queue.enter_queue()
print(number4, number5, number6) # 输出 4 5 6
# 下班
print(queue.get_size()) # 输出 3
```