銀行業務隊列簡單類比__資料結構-PTA-課程設計

來源:互聯網
上載者:User

設某銀行有A、B兩個業務視窗,且處理業務的速度不一樣,其中A視窗處理速度是B視窗的2倍 —— 即當A視窗每處理完2個顧客時,B視窗處理完1個顧客。給定到達銀行的顧客序列,請按業務完成的順序輸出顧客序列。假定不考慮顧客先後到達的時間間隔,並且當不同視窗同時處理完2個顧客時,A視窗顧客優先輸出。 輸入格式:

輸入為一行正整數,其中第1個數字N(≤1000)為顧客總數,後面跟著N位顧客的編號。編號為奇數的顧客需要到A視窗辦理業務,為偶數的顧客則去B視窗。數字間以空格分隔。 輸出格式:

按業務處理完成的順序輸出顧客的編號。數字間以空格分隔,但最後一個編號後不能有多餘的空格。 輸入範例:

8 2 1 3 9 4 11 13 15
輸出範例:
1 3 2 9 11 4 13 15
解析:兩個數組容易解決, 但是是課程設計,考查隊列的使用,因此此題中用了隊列。
 
#include<bits/stdc++.h>#define OVERFLOW -1#define ERROR 0#define FALSE 0#define TRUE 1#define OK 1using namespace std;typedef int Status;typedef int QElemType;typedef struct QNode{    QElemType data;    struct QNode *next;}QNode, *QueuePtr;typedef struct Queue{    QueuePtr front;    QueuePtr rear;}Queue;Status InitQueue(Queue &Q){    Q.front = (QNode *)malloc(sizeof(QNode));    if(!Q.front) exit(OVERFLOW);    Q.front->next = NULL;    Q.rear = Q.front;    return OK;}Status DestroyQueue(Queue &Q){    QNode *p = Q.front, *postp;    while(p)    {        postp = p->next;        free(p);        p = postp;    }    Q.front = Q.rear = NULL;    return OK;}Status ClearQueue(Queue &Q){    QNode *p = Q.front->next;    while(p)    {        QNode *temp = p;        p = p->next;        free(p);    }    Q.rear = Q.front;    Q.rear->next = NULL;}Status EmptyQueue(Queue Q){    if(Q.front == Q.rear)        return TRUE;    return FALSE;}int QueueLength(Queue Q){    int len = 0;    QNode *temp = Q.front->next;    while(temp)    {        ++len;        temp = temp->next;    }    return len;}Status GetHead(Queue Q, QElemType &e){    if(Q.front = Q.rear)        return ERROR;    e = Q.front->next->data;    return OK;}Status EnQueue(Queue &Q, QElemType e){    QueuePtr p;    p = (QNode *)malloc(sizeof(QNode));    if(!p) exit(OVERFLOW);    p->data = e; p->next = NULL;    Q.rear->next = p;    Q.rear = p;    return OK;}Status DeQueue(Queue &Q, QElemType &e){  if(Q.front == Q.rear)    return ERROR;    QueuePtr temp = Q.front->next;    e = temp->data;    Q.front->next = temp->next;    if(Q.rear == temp) Q.rear = Q.front;    free(temp);    return OK;}int main(){    Queue Qa, Qb;    InitQueue(Qa);    InitQueue(Qb);    int n, flag = 0;    scanf("%d", &n);    for(int i = 0; i < n; ++i)    {        QElemType temp;        scanf("%d", &temp);        if(temp % 2 == 1)        {            EnQueue(Qa, temp);        }        else        {         EnQueue(Qb, temp);        }    }    for(int i = 0; i <= n; ++i)    {        QElemType temp;        if(!EmptyQueue(Qa))        {            DeQueue(Qa, temp);            if(flag == 0)              printf("%d", temp);              else               printf(" %d", temp);               flag = 1;        }        if(i % 2 == 1 && !EmptyQueue(Qb))        {            DeQueue(Qb, temp);           if(flag == 0)              printf("%d", temp);              else               printf(" %d", temp);               flag = 1;        }    }}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.