#include <stdio.h>
#include <stdlib.h>
struct QueueNode
{
int front;
int rear;
int capacity;
int count;
char *arrayItem;
};
typedef struct QueueNode* Queue;
void QueueInital(int aMaxEelement);
void QueuePushFront(char aElement);
char QueuePopFront();
void QueQueuePushRear(char aElement);
char QueuePopRear();
void QueueFree();
#include "DoubleQueue.h"
static Queue queue;
static char* Isempty = "\nqueue is empty";
static char* isFull = "\nqueue is full";
void QueueInital(int aMaxEelement)
{
queue = malloc(sizeof(*queue));
if (!queue)
{
printf("create Queue failed!!!!");
return;
}
queue->capacity = aMaxEelement;
queue->arrayItem = malloc(sizeof(char)*aMaxEelement);
if (!(queue->arrayItem))
{
printf("create array failed!!!!");
return;
}
queue->count = 0;
queue->front = 0;
queue->rear = aMaxEelement-1;
}
static int IsEmpty()
{
return queue->count == 0;
}
static int IsFull()
{
return queue->count == queue->capacity;
}
static int add(int aIndex)
{
if (aIndex >= queue->capacity)
{
aIndex = 0;
}
return aIndex;
}
static int minus(int aIndex)
{
if (aIndex < 0)
{
aIndex = queue->capacity -1;
}
return aIndex;
}
void QueuePushFront(char aElement)
{
if (IsFull())
{
printf("%s",isFull);
return;
}
queue->arrayItem[queue->front++] = aElement;
queue->front = add(queue->front);
queue->count++;
}
char QueuePopFront()
{
if (IsEmpty())
{
printf("%s",Isempty);
return 0;
}
queue->front = minus(--queue->front);
--queue->count;
return queue->arrayItem[queue->front];
}
void QueQueuePushRear(char aElement)
{
if (IsFull())
{
printf("%s",isFull);
return;
}
queue->arrayItem[queue->rear--] = aElement;
queue->rear = minus(queue->rear);
queue->count++;
}
char QueuePopRear()
{
if (IsEmpty())
{
printf("%s",Isempty);
return 0;
}
queue->rear = add(++queue->rear);
--queue->count;
return queue->arrayItem[queue->rear];
}
void QueueFree()
{
free(queue->arrayItem);
free(queue);
}