珍珠奶茶, 2023-11-18 15:03 采纳率: 50%
浏览 6
已结题

C语言 数据结构问题怎么做

任务:假设某银行有4个窗口对外接待客户,从早晨银行开门起不断有客户进入银行,由于每个窗口在某个时刻只能接待--个客户。因此在客户人数众多时需要在每个窗口前顺次排队,对于刚进入银行的客户。如果某个窗口的业务员正空闲,则可上前输业务。反之,若个窗口均有客户所占,他便会排在为数最少的队伍后面。编制一个程序模拟银行的这种业务活动并计算一天中客户 在银行的平均逗留时间。

功能要求:

1).实现数据的输入;

2).各个窗口数据的访问和输出;

3)当前窗口的人员分布情况动态显示。

界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计。请在最后的上交资料中指明你用到的存储结构;

测试数据:要求使用1、全部合法数据; 2、整体非法数据: 3、 局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明: .

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-11-18 15:03
    关注

    引自强大而免费的微信小程序:皆我百晓生

    以下是一个简单的C语言程序,用于模拟银行窗口的业务活动,并计算客户在银行的平均逗留时间。程序使用队列(链表实现)作为存储结构。

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct Node {
        int data;
        struct Node *next;
    } Node;
    
    typedef struct Queue {
        Node *front;
        Node *rear;
        int size;
    } Queue;
    
    // 初始化队列
    void initQueue(Queue *queue) {
        queue->front = NULL;
        queue->rear = NULL;
        queue->size = 0;
    }
    
    // 入队操作
    void enqueue(Queue *queue, int data) {
        Node *newNode = (Node *)malloc(sizeof(Node));
        newNode->data = data;
        newNode->next = NULL;
    
        if (queue->rear == NULL) {
            queue->front = newNode;
            queue->rear = newNode;
        } else {
            queue->rear->next = newNode;
            queue->rear = newNode;
        }
    
        queue->size++;
    }
    
    // 出队操作
    int dequeue(Queue *queue) {
        if (queue->front == NULL) {
            printf("队列为空\n");
            return -1;
        }
    
        Node *temp = queue->front;
        int data = temp->data;
    
        queue->front = queue->front->next;
        free(temp);
    
        if (queue->front == NULL) {
            queue->rear = NULL;
        }
    
        queue->size--;
    
        return data;
    }
    
    // 获取队列大小
    int getSize(Queue *queue) {
        return queue->size;
    }
    
    int main() {
        Queue *windows = (Queue *)malloc(4 * sizeof(Queue));
        int totalTime = 0;
    
        // 初始化窗口
        for (int i = 0; i < 4; i++) {
            initQueue(&windows[i]);
        }
    
        while (1) {
            int numCustomers;
            printf("请输入进入银行的客户人数(输入0退出):");
            if (scanf("%d", &numCustomers) != 1) {
                printf("输入内容非法,请重新输入。\n");
                scanf("%*s");  // 清空输入缓冲区
                continue;
            }
            if (numCustomers == 0) {
                break;
            }
    
            int minSizeWindow = 0;
            for (int i = 1; i < 4; i++) {
                if (getSize(&windows[i]) < getSize(&windows[minSizeWindow])) {
                    minSizeWindow = i;
                }
            }
    
            printf("请依次输入每位客户的业务所需时间:\n");
            for (int i = 0; i < numCustomers; i++) {
                int serviceTime;
                printf("客户%d:", i + 1);
                if (scanf("%d", &serviceTime) != 1) {
                    printf("输入内容非法,请重新输入。\n");
                    scanf("%*s");  // 清空输入缓冲区
                    i--;
                    continue;
                }
                enqueue(&windows[minSizeWindow], serviceTime);
            }
        }
    
        // 计算平均逗留时间
        for (int i = 0; i < 4; i++) {
            while (getSize(&windows[i]) > 0) {
                int serviceTime = dequeue(&windows[i]);
                totalTime += serviceTime;
            }
        }
    
        double avgTime = (double)totalTime / 4;
        printf("客户在银行的平均逗留时间为:%.2f\n", avgTime);
    
        free(windows);
    
        return 0;
    }
    

    上述代码中使用了一个包含四个队列的数组 Queue windows[4],每个队列表示一个窗口。每次有客户进入银行时,选择队列大小最小的窗口,将客户的业务所需时间入队。最后,遍历所有窗口的队列,将每个客户的业务所需时间累加,得到总的逗留时间,再根据窗口数量求平均值即可。

    请确保在运行程序时输入符合测试要求的数据,如合法数据、整体非法数据和局部非法数据,以保证程序的稳定性。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月18日
  • 已采纳回答 11月18日
  • 创建了问题 11月18日