You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C语言的Queue实现输入姓名时自动分配客户编号?

实现带自动编号的客户队列系统

核心思路

用队列数据结构维护客户的顺序,同时用一个计数器自动生成从1开始的唯一编号。每个队列元素存储客户的编号和姓名组合(比如元组或字典),方便后续操作直接读取这两个信息。

关键功能实现步骤

  • 入队(Enqueue):

    1. 初始化计数器,初始值设为1。
    2. 用户输入姓名后,将计数器值作为当前客户的编号,把(编号,姓名)添加到队列末尾。
    3. 计数器自增,为下一个客户准备编号。
  • 出队(Dequeue):

    1. 先检查队列是否为空,为空则提示无客户可删除。
    2. 弹出队列的第一个元素(队首)。
    3. 按指定格式输出:Customer number {编号} "{姓名}" is deleted。
  • 查看队首(Peek):

    1. 检查队列是否为空,为空则提示队列为空。
    2. 获取队列的第一个元素(不删除)。
    3. 按指定格式输出:Customer number {编号} '{姓名}' is first in line。
  • 显示所有客户(Display):

    1. 遍历队列中的每个元素。
    2. 逐个输出客户的编号和姓名,比如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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 21:05:17