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.

Relaterade Ämnen