您的位置:首页 > 其它

使用数组实现双端队列

2013-02-28 16:12 501 查看
#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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: