示例#1
0
 public void Enqueue(klant currentKlant)
 {
     q_Array[end] = currentKlant;
     if (end == Length)
     {
         end = 1;
     }
     else
     {
         end++;
         Length++;
     }
 }
示例#2
0
 public klant Dequeue()
 {
     tijdelijk = q_Array[front];
     if (front == q_Array.Length)
     {
         front = 1;
     }
     else
     {
         front++;
         Length--;
     }
     return(tijdelijk);
 }
示例#3
0
        public static void Main(string[] args)
        {
            // Declaraties queue classes
            Queue queueA = new Queue();
            Queue queueB = new Queue();
            Queue queueC = new Queue();

            // Piet stack
            Stack Piet = new Stack();

            // Eerste input
            string input = Console.ReadLine();

            // Array van structs met klanten
            klant[] klanten       = new klant[2100000];
            int     klanten_index = 1;

            // Input Loop om array van klanten (structs) te vullen met de input.
            while (input != "sluit")
            {
                // Invoer
                string[] input_tps = input.Split(' ');
                int      input_t   = int.Parse(input_tps[0]);
                int      input_p   = int.Parse(input_tps[1]);
                int      input_s   = int.Parse(input_tps[2]);
                int      input_tp  = input_t + input_p;

                klant k = new klant(input_t, input_p, input_s);

                klanten[klanten_index] = k;
                klanten_index++;

                input = Console.ReadLine();
            }
            //------------------------------
            //        DE SIMULATIE
            //------------------------------
            // Juiste queue kiezen voor simulatie
            for (int i = 0; i < klanten.Length; i++)
            {
                if (klanten[i].t == i) // Als de tijd van binnenkomst gelijk is aan de actuele tijd -->
                {
                    // Klant kiest A
                    if (queueA.Length == Math.Min(queueA.Length, Math.Min(queueB.Length, queueC.Length)))
                    {
                        queueA.Enqueue(klanten[i]);
                    }
                    // Klant kiest B
                    else if (queueB.Length == Math.Min(queueA.Length, Math.Min(queueB.Length, queueC.Length)))
                    {
                        queueB.Enqueue(klanten[i]);
                    }
                    // Klant kiest C
                    else if (queueC.Length == Math.Min(queueA.Length, Math.Min(queueB.Length, queueC.Length)))
                    {
                        queueC.Enqueue(klanten[i]);
                    }
                }
                // Als een printer klaar is met een bouwplaat, dan komt hij op  stack
                // Als ze tegelijk klaar zijn dan A -> B -> C respectievelijk
                // Per queue voor de uitvoer checken of hij een nieuw record heeft bereikt voor langste wachttijd.

                if (queueA.q_Array[queueA.front].p_remaining == 0)
                {
                    Piet.push(queueA.Dequeue);
                }

                if (queueB.q_Array[queueB.front].p_remaining == 0)
                {
                    Piet.push(queueB.Dequeue);
                }

                if (queueC.q_Array[queueB.front].p_remaining == 0)
                {
                    Piet.push(queueC.Dequeue);
                }
                // Counter, voor elke tijdstap gaat de printtijd omlaag
                queueA.q_Array[queueA.front].p_remaining--;
                queueB.q_Array[queueB.front].p_remaining--;
                queueC.q_Array[queueC.front].p_remaining--;

                // Snijden
                if (Piet.curKlant.s_remaining == 0)
                {
                    Piet.curKlant = Piet.pop();
                }
                Piet.curKlant.s_remaining--;


                // Uitvoer
                // klantnummer die het langst in de tij heeft gewacht (klant_index),
                // gevolgd door een dubbele punt en een enkele spatie,
                // met daarna het aantal tijdstappen dat de kalnt heeft gewacht

                // Op de tweede regel
            }
        }
示例#4
0
 void push(klant currentJob)
 {
     top++;
     stack_array[top] = currentJob;
     Length++;
 }