[アルゴリズム]銀行管理待ち番号(C)


銀行が待機番号を管理するプログラムを作成しましょう.
前から終了した構造のキューを使用します.

<コード>

#include <stdio.h>

#define  QUEUE_CAPA 8



int queue[QUEUE_CAPA]; // 전체적인 배열을 선언한 것이다.

int head = 0; // 배열의 맨 앞 부분을 의미한다.

int tail = 0; // 꼬리 부분을 의미한다.

int queue_size = 0; // 값을 넣은 부분(인덱스)을 의미한다. 



int enqueue(int n)

{

    if (queue_size == QUEUE_CAPA) 

    {

        printf("queue Full!!! \n");

        return;

    }

    tail++;

    queue_size++;

    queue[tail] = n;



}



int dequeue() 

{

    int r;

    if (queue_size == 0) 
    {

        printf("queue empty!!\n");

        return 0;

    }

    r = queue[head];

    head++;

    queue_size--;

    return r;







}

int main()

{

    int number, r;

    do {

        printf("input number\n");

        scanf_s("%d", &number);

        if (number > 0)

        {

            enqueue(number);



        }
        else if (number == 0)

        {

            r = dequeue();

            printf("[%d]\n", r);

        }



    } while (number >= 0);

    return 0;



}

<結果>



前に保存した値を
  • 0でエクスポートします.
  • の負数または条件に合致しない場合は、終了します.
  • <重要コード1>

    int enqueue(int n)
    
    {
    
        if (queue_size == QUEUE_CAPA) 
        {
    
            printf("queue Full!!! \n");
    
            return;
    
        }
    
        tail++;
    
        queue_size++;
    
        queue[tail] = n;
    
    
    
    }
    
  • コンソールウィンドウでは、ユーザーが入力した配列がそれより大きい場合、
  • 関数が使用されます.
  • enqueueはテールを追加し、それに応じてqueue sizeも追加した.
  • キュー[tail]値にユーザが入力した値を加えます.
  • <重要コード2>

    int dequeue() 
    
    {
    
        int r;
    
        if (queue_size == 0) 
    
        {
    
            printf("queue empty!!\n");
    
            return 0;
    
        }
    
        r = queue[head];
    
        head++;
    
        queue_size--;
    
        return r;
    
    
    
    
    
    
    
    }
    

  • Dequeueを宣言したのは、queue関数を前に表示したときです.最初に入れたものが1位になります.0を入力すると、配列の前の最初の入力値が出力されます.

  • r=queue[head]値は、==エクスポートされた値/r値にqueueを代入し、順序的に前に位置する.

  • head++が増加したのは、前の値がエクスポートされたため、tail方向に移動します.

  • queue sizeは配列全体のサイズが小さくなるため減少する.
    しかし、問題があります.列の前に空席があっても使えません.この問題を解決するために,筆者は円形キューを用いた.
  • tail = (tail + 1) % QUEUE_CAPA;
    head = (head + 1) % QUEUE_CAPA;
    各部分のコードをこのように修正すればいいです.