数据结构试验-银行业务队列简单模拟

 

  设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍——即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。

 

# include <stdio.h>

# include <malloc.h>



typedef struct Node

{

    int data;                // 元素数据

    struct Node *next;            // 链式队列中结点元素的指针

} QNode, *pQNode;



typedef struct

{

    pQNode front;                // 队列头指针

    pQNode rear;             // 队列尾指针

}LinkQueue;





//初始化队列,Q为待初始化队列



void InitQueue(LinkQueue *Q)

{

    Q->front = Q->rear = (pQNode)malloc(sizeof(QNode));

    Q->front->next = NULL;

}





void AddQ(LinkQueue *Q, int data)

{

    pQNode tmp;

    tmp = (pQNode)malloc(sizeof(QNode));

    tmp->data = data;

    tmp->next = NULL;



    Q->rear->next = tmp;

    Q->rear = tmp;

}



void printHead(LinkQueue *Q)

{

    pQNode tmp;

    tmp = Q->front->next;

    Q->front->next = tmp->next;

    printf("%d ",tmp->data);

    free(tmp);

}



int main()

{

    int tmp,size,i,lenA = 0,lenB = 0;

    LinkQueue A;

    LinkQueue B;



    InitQueue(&A);

    InitQueue(&B);

    scanf("%d", &size);

    for(i = 0;i<size; i++ )

    {

        scanf("%d",&tmp);

        if(tmp%2)

        {

            AddQ(&A, tmp);

            lenA++;

        }

        else

        {

            AddQ(&B, tmp);

            lenB++;

        }

    }

    size = lenA/2 >= lenB ? lenA/2:lenB;



    for(i = 0;i<size; i++)

    {

        if(lenA > 1)

        {

            printHead(&A);

            printHead(&A);

            lenA-=2;

        }

        if(lenA == 1)

        {

            printHead(&A);

            lenA--;

        }

        if(lenB> 0)

        {

             printHead(&B);

             lenB--;

        }

    }

    return 0;

}
View Code

 

你可能感兴趣的:(数据结构)