如何用C语言的Queue实现输入姓名时自动分配客户编号?
实现带自动编号的客户队列系统
核心思路
用队列数据结构维护客户的顺序,同时用一个计数器自动生成从1开始的唯一编号。每个队列元素存储客户的编号和姓名组合(比如元组或字典),方便后续操作直接读取这两个信息。
关键功能实现步骤
入队(Enqueue):
- 初始化计数器,初始值设为1。
- 用户输入姓名后,将计数器值作为当前客户的编号,把(编号,姓名)添加到队列末尾。
- 计数器自增,为下一个客户准备编号。
出队(Dequeue):
- 先检查队列是否为空,为空则提示无客户可删除。
- 弹出队列的第一个元素(队首)。
- 按指定格式输出:
Customer number {编号} "{姓名}" is deleted。
查看队首(Peek):
- 检查队列是否为空,为空则提示队列为空。
- 获取队列的第一个元素(不删除)。
- 按指定格式输出:
Customer number {编号} '{姓名}' is first in line。
显示所有客户(Display):
- 遍历队列中的每个元素。
- 逐个输出客户的编号和姓名,比如
Customer number {编号}: {姓名}。
Python代码示例
from collections import deque # 初始化队列和编号计数器 customer_queue = deque() next_customer_id = 1 def enqueue(name): global next_customer_id customer_queue.append((next_customer_id, name)) print(f"已为客户'{name}'分配编号{next_customer_id}") next_customer_id += 1 def dequeue(): if not customer_queue: print("队列为空,没有客户可删除") return cust_id, name = customer_queue.popleft() print(f'Customer number {cust_id} "{name}" is deleted') def peek(): if not customer_queue: print("队列为空,没有客户在队首") return cust_id, name = customer_queue[0] print(f"Customer number {cust_id} '{name}' is first in line") def display(): if not customer_queue: print("当前没有客户") return print("当前队列客户列表:") for cust_id, name in customer_queue: print(f"- 编号{cust_id}:{name}") # 测试功能 if __name__ == "__main__": enqueue("Althea") enqueue("Bob") peek() display() dequeue() display()
代码说明
- 用
collections.deque实现队列,它的popleft()操作是O(1)时间复杂度,比普通列表的pop(0)更高效。 next_customer_id作为全局变量记录下一个待分配的编号,每次入队后自动自增。- 每个操作都增加了空队列判断,避免程序因空队列操作报错,提升健壮性。
内容的提问来源于stack exchange,提问作者anna
相关产品推荐
相关产品推荐

