Introduction: Queue in C

Operation Queue

Here will be explained a little about the implementation of the Queue with Premtive ( Priority ) .

Without further ado immediately wrote to code themselves :

First type in the code below , and save it as interface.h :

#include

#include

#define Error(Str) FatalError(Str)

#define FatalError(Str) fprintf(stderr, "%s\n", Str), exit(1)

Then save the file queue.h code below :

#ifndef _Queue_h

#define _Queue_h

typedef int ElementType;

struct QueueRecord;

typedef struct QueueRecord *Queue;

Queue CreateQueue(int MaxElements);

void Enqueue(ElementType X, Queue Q);

ElementType Front(Queue Q);

void Dequeue(Queue Q);

void Preemptive(ElementType X, Queue Q);

void DisposeQueue(Queue Q);

void MakeEmpty(Queue Q);

int IsEmpty(Queue Q);

int IsFull(Queue Q);

#endif

Then type the code below and save the file as an implementation with queue.c :

#include "queue.h"

#include "fatal.h"

#include

struct QueueRecord{

int Capacity;

int Front;

int Rear;

int Size;

ElementType *Array;

};

static int Succ(int value, Queue Q);

void Enqueue(ElementType X, Queue Q){

if(IsFull(Q))

Error("Full Queue");

else{

Q->Size++;

Q->Array[Q->Rear]=X;

Q->Rear = Succ(Q->Rear,Q);

}

}

Queue CreateQueue(int MaxElements){

Queue Q = NULL;

Q=malloc(sizeof(struct QueueRecord));

if(Q==NULL)

FatalError("Out of Space!!!");

Q->Array=malloc(sizeof(ElementType) * MaxElements);

if(Q->Array==NULL)

FatalError("Out of space!!!");

Q->Capacity=MaxElements;

MakeEmpty(Q);

return Q;

}

void Preemptive(ElementType X, Queue Q){

if(IsFull(Q))

Error("Full Queue");

else{

Q->Size++;

Q->Array[Q->Front]=X;

Q->Rear = Succ(Q->Rear,Q);

}

}

ElementType Front(Queue Q){

if(!IsEmpty(Q))

return Q->Array[Q->Front];

Error("Empty Queue");

return 0;

}

void Dequeue(Queue Q){

if(IsEmpty(Q))

Error("Empty queue");

else{

Q->Size--;

Q->Front = Succ(Q->Front, Q);

}

}

void DisposeQueue(Queue Q){

if(Q != NULL ){

free(Q->Array);

free(Q);

}

}

static int Succ(int Value, Queue Q){

if(++Value == Q->Capacity)

Value=0;

return Value;

}

void MakeEmpty(Queue Q){

Q->Size = 0;

Q->Front = 0;

Q->Rear = 0;

}

int IsEmpty(Queue Q){

return Q->Size == 0;

}

int IsFull(Queue Q){

return Q->Size == Q->Capacity;

}

Save the file with the name fourth klien.c that functions as a client

#include

#include "queue.h"

int main(){

Queue Q;

int i;

int n=20;

static int max_queue_size = 20;

Q = CreateQueue(max_queue_size);

Preemptive(90,Q);

printf("%d\t",Front(Q));

Dequeue(Q);

for(i=0;i

for(i=0;i

if(Q!=NULL){

if(i%2==0){

Enqueue(i,Q);

}

}

if(i%2==0)

printf("%d,",i);

}

}

DisposeQueue(Q);

return 0;

}

Once compiled it will display results from the sum of the even numbers in a row from the start of 0 to 18 .Results of the sum is number 90 .Number is the series are :

90 0,2,4,6,8,10,12,14,16,18.