Kö i C
Operation kö
Här förklaras lite om genomförandet av kön med Premtive (prioritet).
Utan vidare skrev omedelbart till kod själva:
Först skriver i koden nedan och spara den som interface.h:
#include
#include
#define Error(Str) FatalError(Str)
#define FatalError(Str) fprintf (stderr, "%s\n", Str), exit(1)
Spara sedan filen queue.h koden nedan:
#ifndef _Queue_h
#define _Queue_h
TypeDef int ElementType;
struct QueueRecord;
TypeDef struct QueueRecord * kö;
Kö CreateQueue(int MaxElements);
Tom Enqueue (ElementType X, kö Q);
ElementType Front(Queue Q);
Annullera Dequeue (kö Q);
Annullera spärrande (ElementType X, kö Q);
void DisposeQueue(Queue Q);
void MakeEmpty(Queue Q);
int IsEmpty (kö Q);
int IsFull (kö Q);
#endif
Sedan skriver du koden nedan och spara filen som en implementering med queue.c:
#include "queue.h"
#include "fatal.h"
#include
struct QueueRecord {
int-kapacitet.
int fronten;
int bak;
int storlek;
ElementType * Array;
};
statisk int Succ (int value, kö Q);
Tom Enqueue (ElementType X, kö Q) {
IF(IsFull(Q))
Fel ("Full kön");
annat {
Q -> storlek ++;
Q -> Array [Q -> bakre] = X;
Q -> bak = Succ (Q -> bak, Q).
}
}
Kö CreateQueue(int MaxElements) {
Kö Q = NULL;
Q = malloc (sizeof(struct QueueRecord));
IF(Q==null)
FatalError ("ut i rymden!");
Q -> Array=malloc(sizeof(ElementType) * MaxElements);
om (Q -> Array == NULL)
FatalError ("ut i rymden!");
Q -> kapacitet = MaxElements;
MakeEmpty(Q);
returnera Q;
}
Annullera spärrande (ElementType X, kö Q) {
IF(IsFull(Q))
Fel ("Full kön");
annat {
Q -> storlek ++;
Q -> Array [Q -> Front] = X;
Q -> bak = Succ (Q -> bak, Q).
}
}
ElementType Front(Queue Q) {
IF (!. IsEmpty(Q))
returnera Q -> Array [Q -> Front];
Fel ("tomma kön");
Return 0;
}
void Dequeue (kö Q) {
IF(IsEmpty(Q))
Fel ("tomma kön");
annat {
Q -> storlek--;
Q -> Front = Succ (Q -> Front, Q).
}
}
void DisposeQueue(Queue Q) {
om (Q! = NULL) {
gratis (Q -> Array).
Free(Q);
}
}
statisk int Succ (int värde, kö Q) {
om (++ värde == Q -> kapacitet)
Värde = 0;
returnera värdet;
}
void MakeEmpty(Queue Q) {
Q -> storlek = 0;
Q -> Front = 0;
Q -> bak = 0;
}
int IsEmpty (kö Q) {
returnera Q -> storlek == 0;
}
int IsFull (kö Q) {
returnera Q -> storlek == Q -> kapacitet.
}
Spara filen med namnet fjärde klien.c som fungerar som en klient
#include
#include "queue.h"
int main () {
Kö Q;
int i;
int n = 20;
statisk int max_queue_size = 20;
Q = CreateQueue(max_queue_size);
Preemptive(90,Q);
printf("%d\t",Front(Q));
Dequeue(Q);
för (jag = 0; jag
för (jag = 0; jag
IF(Q!=null) {
om (i %2 == 0) {
Enqueue(i,Q);
}
}
IF(i%2==0)
printf("%d,",i);
}
}
DisposeQueue(Q);
Return 0;
}
En gång kompilerade visas resultat från summan av de jämna nummer i rad från början av 0 till 18. Resultaten av summan är nummer 90. Tal är serien är:
90 0,2,4,6,8,10,12,14,16,18.