[GO] C-Sprache ALDS1_3_B Warteschlange

Problem

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_3_B&lang=ja

Der Punkt

** Queue ** oder ** Queue ** ist eine der grundlegenden ** Datenstrukturen ** eines Computers. Es enthält Daten in einer First-In- und First-Out-Listenstruktur. Beim Abrufen von Daten aus der Warteschlange werden die zuerst eingegebenen Daten der Reihe nach abgerufen. Das Einfügen von Daten in eine Warteschlange wird als Encuing und das Herausnehmen von Daten als Decuing bezeichnet.

Mit anderen Worten, die Tokoten-Methode

Die Round-Robin-Planung [^ 1] kann mithilfe von Warteschlangen simuliert werden, in denen Prozesse gespeichert (verwaltet) werden. Zunächst werden die Prozesse im Ausgangszustand der Reihe nach in die Warteschlange gestellt. Wiederholen Sie als Nächstes, bis die Warteschlange leer ist, den Vorgang "Nehmen Sie den Prozess von Anfang an heraus, verarbeiten Sie höchstens Quantum [^ 2] und fügen Sie ihn erneut zur Warteschlange hinzu, wenn die erforderliche Verarbeitung (Zeit) noch besteht". ..

[^ 1]: Round Robin ist in englischer Sprache als Round Robin geschrieben. Es ist ein Wort, das bedeutet, dass einige Rollen und Wendungen unter bestimmten Bedingungen in der richtigen Reihenfolge ausgetauscht werden. Es wird an verschiedenen Stellen verwendet, beispielsweise bei der Aufgabenverwaltung des Betriebssystems eines PCs auf einfache, aber ebenso ewige Weise, ohne einen speziellen Kopf zu verwenden.

[^ 2]: Die maximale Anzahl von Prozessen, die die CPU verarbeiten kann. Der Bereich, der gleichzeitig verarbeitet werden kann.

Warteschlangenoperation

Implementierung

Code

#include <stdio.h>
#include <string.h>
#define LEN 100000

typedef struct
{
    char name[100];
    int time;
} Process;

/* global variable */
static Process Q[LEN];
static int head, tail, n;

/* enqueue */
void enqueue(Process process_obj)
{
    Q[tail] = process_obj;
    tail = (tail + 1) % LEN;
}

/* dequeue */
Process dequeue()
{
    Process process_obj;

    process_obj = Q[head];
    head = (head + 1) % LEN;

    return process_obj;
}

int min(int a, int b) { return a < b ? a : b; }

int main(void)
{
    int elapse_time = 0;
    int time_ms;
    int qms;
    Process process_obj;

    /* input */
    scanf("%d %d", &n, &qms);
    for (int i = 1; i <= n; i++)
    {
        scanf("%s", Q[i].name);
        scanf("%d", &Q[i].time);
    }

    /* initialize */
    head = 1;
    tail = n + 1;

    while (head != tail)
    {
        process_obj = dequeue();
        time_ms = min(qms, process_obj.time);
        process_obj.time -= time_ms;
        elapse_time += time_ms;

        if (process_obj.time > 0)
            enqueue(process_obj);
        else
            printf("%s %d\n", process_obj.name, elapse_time);
    }
    return 0;
}

Punkt

Impressionen

Zeitaufwand 180 Minuten

【Rezension】

    while (head != tail)
    {
        process_obj = dequeue();
        if(process_obj.time > qms){
            process_obj.time -= qms;
            elapse_time += qms;
            enqueue(process_obj);
        } else {
            elapse_time += process_obj.time;
            printf("%s %d\n", process_obj.name, elapse_time);
        }
     }

Recommended Posts

C-Sprache ALDS1_3_B Warteschlange
Linkliste (list_head / queue) in C-Sprache
[C-Sprachalgorithmus] Endianness
[C-Sprachalgorithmus] Blockbewegung
Heap-Sortierung in C-Sprache
[C Sprache] readdir () vs readdir_r ()
C-Sprache ALDS1_4_A Lineare Suche
Modultest mit mehreren Instanzen in C-Sprache
Funktionszeiger und objdump ~ C language ~
Realisieren Sie die Schnittstellenklasse in der Sprache C.
Schreiben der C-Sprache mit Sympy (Metaprogrammierung)
Programmiersprache für hohe Energieeffizienz C.
Einführung in Protobuf-c (C-Sprache ⇔ Python)
Warteschlange
[C-Sprachalgorithmus] binärer Suchbaum
C Sprache 8 Königin Problem lösen 3 Muster
Segfo mit 16 Zeichen in C-Sprache
Rufen Sie die c-Sprache von Python aus auf (python.h)
4-Sprachen-Vergleich des Abschlusses (Python, JavaScript, Java, C ++)
Socket-Kommunikation in C-Sprache und Python
Generieren Sie mit Python eine C-Sprache aus dem S-Ausdruck