Eip_Nit_AC 2019-06-26 16:28 采纳率: 25%
浏览 614
已结题

关于数据结构 银行排队 单队列多窗口 的疑问?

#include<stdio.h>
#include<stdlib.h>
#define MaxSize 5
#define MaxWindow 5
#define MaxProc 1

typedef struct{
    int T;
    int P;
}People;

typedef struct{
    People data[MaxSize];
    int front, rear;
}SqQueue;

void InitQueue(SqQueue *&q){
    q = (SqQueue *)malloc(sizeof(SqQueue));
    q->front = q->rear = 0;
}

void Destroy(SqQueue *&q){
    free (q);
}

bool QueueEmpty(SqQueue *q){
    return(q->front == q->rear);
}

bool enQueue(SqQueue *&q, People e){
    if ((q->rear + 1) % MaxSize == q->front)
        return false;
    q->rear = (q->rear + 1) % MaxSize;
    q->data[q->rear] = e;
    return true;
}

bool deQueue(SqQueue *&q, People &e){
    if (q->front == q->rear)
        return false;
    q->front = (q->front + 1) % MaxSize;
    e = q->data[q->front];
    return true;
}

double QueueingAtBank(SqQueue *&Q, int N){
    struct People Next;
    int K;
    int TotalTime;
    int CurrentTime;
    int Window[MaxWindow];
    int WaitTime;
    int WinAvail;
    int i, j;
    scanf("%d", &K);
    if (N < K)return 0;
    for (i = 0; i < K; i++)
        Window[i] = 0;
    TotalTime = 0;
    while (!QueueEmpty(Q)){
        WinAvail = FindNextWindow(Window, K ,&WaitTime);
        CurrentTime += WaitTime;
        People X;
        Next = deQueue(Q,X);
        if (CurrentTime >= Next.T)
            TotalTime += (CurrentTime - Next.T);
        else
        {
            WaitTime = Next.T - CurrentTime;
            for (j = 0; j < K; j++)
            {
                Window[j] -= WaitTime;
                if (Window[j] < 0)
                    Window[j] = 0;
            }
            CurrentTime = Next.T;
        }
        Window[WinAvail] = Next.P;
    }
    return((double)TotalTime / (double)N);
}

int FindNextWindow(int W[], int k, int *WaitTime)
{
    int WinAvail;
    int MinW = MaxProc + 1;
    int i;
    for (i = 0; i < k; i++)
        if (W[i] < MinW)
        {
        MinW = W[i];
        WinAvail = i;
        }
    *WaitTime = MinW;
    for (i = 0; i < k; i++)
        W[i] -= MinW;
    return WinAvail;
}

int main(){
    int N;
    SqQueue *Q;
    int i;
    People X;
    int N= MaxSize;
    for (i = 0; i < N; i++){
        scanf("%d %d", &X.T, &X.P);
        enQueue(Q, X);
    }
    printf("Average waiting time=%.if.\n", QueueingAtBank(Q, N));
    Destroy(Q);
    return 0;
}

请问各位大佬我想用People Next中的Next以及后面的所有Next报错
我想用来表示下一位顾客
但是不知道该怎么表示

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-20 19:24
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月10日

悬赏问题

  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100