Operatie wachtrij
Hier zal worden verklaard een beetje over de uitvoering van de wachtrij met Premtive (prioriteit).
Zonder verdere ado schreef onmiddellijk aan de code zelf:
Eerst Typ in de onderstaande code en sla deze op als interface.h:
#include
#include
#define Error(Str) FatalError(Str)
#define FatalError(Str) fprintf (stderr, "%s\n", Str), exit(1)
Sla het bestand queue.h code hieronder in:
#ifndef _Queue_h
#define _Queue_h
typedef int ElementType;
struct QueueRecord;
typedef struct QueueRecord * wachtrij;
Wachtrij CreateQueue(int MaxElements);
VOID Enqueue (ElementType X, wachtrij Q);
ElementType Front(Queue Q);
VOID Dequeue (wachtrij Q);
VOID Preemptive (ElementType X, wachtrij Q);
nietig DisposeQueue(Queue Q);
nietig MakeEmpty(Queue Q);
int IsEmpty (wachtrij Q);
int IsFull (wachtrij Q);
#endif
Typ de onderstaande code en sla het bestand op als een implementatie met queue.c:
#include "queue.h"
#include "fatal.h"
#include
struct QueueRecord {}
int capaciteit;
int Front;
int achterzijde;
int Size;
ElementType * Array;
};
statische int Succ (int waarde, wachtrij Q);
VOID Enqueue (ElementType X, wachtrij Q) {}
if(IsFull(Q))
Fout ("volle rij");
else {}
Q -> grootte ++;
Q -> Array [Q -> Rear] = X;
Q -> achter = Succ (Q -> achterzijde, Q);
}
}
Wachtrij CreateQueue(int MaxElements) {}
Wachtrij Q = NULL;
Q = malloc (sizeof(struct QueueRecord));
if(Q==null)
FatalError ('onvoldoende ruimte!');
Q-Array=malloc(sizeof(ElementType) > * MaxElements);
Als (Q -> Array == NULL)
FatalError ('onvoldoende ruimte!');
Q -> capaciteit = MaxElements;
MakeEmpty(Q);
terugkeer van Q;
}
VOID Preemptive (ElementType X, wachtrij Q) {}
if(IsFull(Q))
Fout ("volle rij");
else {}
Q -> grootte ++;
Q -> Array [Q -> Front] = X;
Q -> achter = Succ (Q -> achterzijde, Q);
}
}
ElementType Front(Queue Q) {}
if (!. IsEmpty(Q))
retourneren Q -> Array [Q -> Front];
Fout ("lege wachtrij");
keren 0;
}
VOID Dequeue (wachtrij Q) {}
if(IsEmpty(Q))
Fout ("lege wachtrij");
else {}
Q -> grootte--;
Q -> Front = Succ (Q -> Front, Q);
}
}
VOID DisposeQueue(Queue Q) {}
Als (Q! = NULL) {}
gratis (Q -> Array);
Free(Q);
}
}
statische int Succ (int waarde, wachtrij Q) {}
Als (++ waarde == Q -> capaciteit)
Waarde = 0;
retourwaarde;
}
VOID MakeEmpty(Queue Q) {}
Q -> grootte = 0;
Q -> Front = 0;
Q -> achter = 0;
}
int IsEmpty (wachtrij Q) {}
retourneren Q -> grootte == 0;
}
int IsFull (wachtrij Q) {}
retourneren Q -> grootte == Q -> capaciteit;
}
Sla het bestand met de naam vierde klien.c dat als een client functioneert
#include
#include "queue.h"
int main() {}
Wachtrij Q;
int i;
int n = 20;
statische int max_queue_size = 20;
Q = CreateQueue(max_queue_size);
Preemptive(90,Q);
printf("%d\t",Front(Q));
Dequeue(Q);
voor (ik = 0; i
voor (ik = 0; i
if(Q!=null) {}
Als (ik %2 == 0) {}
Enqueue(i,Q);
}
}
if(i%2==0)
printf("%d,",i);
}
}
DisposeQueue(Q);
keren 0;
}
Eenmaal gecompileerde het zal resultaten weergeven van de som van de even getallen in een rij vanaf het begin van 0 tot en met 18. Resultaten van de som is nummer 90. Getal is dat de reeks zijn:
90 0,2,4,6,8,10,12,14,16,18.