DS队列--银行单队列多窗口模拟示例代码
时间: 2023-10-26 15:08:49 浏览: 114
以下是一个简单的银行单队列多窗口模拟示例代码,使用循环队列实现:
```
class Queue:
def __init__(self, capacity):
self.capacity = capacity
self.front = 0
self.rear = 0
self.size = 0
self.data = [None] * 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.data[self.rear] = item
self.rear = (self.rear + 1) % self.capacity
self.size += 1
return True
def dequeue(self):
if self.is_empty():
return None
item = self.data[self.front]
self.front = (self.front + 1) % self.capacity
self.size -= 1
return item
class Bank:
def __init__(self, num_windows):
self.num_windows = num_windows
self.windows = [Queue(10) for i in range(num_windows)]
self.customers = Queue(100)
def add_customer(self, customer):
self.customers.enqueue(customer)
def serve_customers(self):
for i in range(self.num_windows):
if not self.customers.is_empty():
customer = self.customers.dequeue()
self.windows[i].enqueue(customer)
def print_status(self):
for i in range(self.num_windows):
print("Window {}: {}".format(i+1, list(self.windows[i].data)))
bank = Bank(3)
bank.add_customer("Alice")
bank.add_customer("Bob")
bank.add_customer("Charlie")
bank.add_customer("Dave")
bank.serve_customers()
bank.print_status()
```
这个示例代码中,我们定义了一个 Queue 类来实现循环队列。然后我们定义了一个 Bank 类来模拟银行的窗口和客户。Bank 类中有一个 customers 队列来存储所有的客户,还有一个 windows 列表来存储所有的窗口,每个窗口都是一个 Queue 对象。add_customer 方法用来添加客户到 customers 队列中,serve_customers 方法用来将客户分配到各个窗口中,print_status 方法用来打印每个窗口中的客户。最后我们创建了一个 Bank 对象,添加了一些客户,然后调用 serve_customers 和 print_status 方法来模拟银行的运行情况。
阅读全文