#include <stdio.h>
#include <stdlib.h>
//leetcode 分式化简
struct QueueRecord;
typedef int ElementType;
struct QueueRecord
{
int Capacity;//容积
int Front;
int Rear;
int Size;//尺寸
ElementType *Array;
};
typedef struct QueueRecord *Queue;
//制作空
void MakeEmpty(Queue Q);
//成功
static int Succ(int Value,Queue Q);
//创建队列
Queue CreateQueue(int MaxElements);
//释放队列
void DisposeQueue(Queue queue);
//出队
void Dequeue(Queue queue);
//入队
void Enqueue(ElementType X,Queue Q);
ElementType FrontAndDequeue(Queue Q);
//是否满了
int isFull(Queue Q);
//是否为空
int IsEmpty(Queue Q);
int main()
{
return 0;
}
//检查是否是空的
int IsEmpty(Queue Q)
{
return Q->Size == 0;
}
void MakeEmpty(Queue Q)
{
Q->Size = 0;
Q->Front = 1;
Q->Rear = 0;
}
static int Succ(int Value,Queue Q)
{
if(++Value == Q->Capacity)
Value = 0;
return Value;
}
//创建一个队列
Queue CreateQueue(int MaxElements)
{
Queue queue = calloc(1,sizeof(struct QueueRecord));
queue->Capacity = MaxElements;
queue->Front = 1;
queue->Rear = 0;
queue->Size = 0;
queue->Array = (ElementType*)calloc(MaxElements,sizeof(ElementType));
return queue;
}
void DisposeQueue(Queue queue)
{
if(queue) {
//释放队列
if (queue->Array) {
free(queue->Array);
}
//释放节点
free(queue);
}
}
void Dequeue(Queue queue)
{
if(IsEmpty(queue))
{
printf("Empty queue\n");
exit(-1);
}else{
queue->Size--;
queue->Front = Succ(queue->Front,queue);
}
}
int isFull(Queue Q)
{
return Q->Capacity == Q->Size;
}
//如队列
void Enqueue(ElementType X,Queue Q)
{
//首先要检查队列是否满了
if(isFull(Q))
{
printf("Full queue\n");
exit(-1);
}else{
Q->Size++;
Q->Rear = Succ(Q->Rear,Q);
Q->Array[Q->Rear] = X;
}
}
ElementType FrontAndDequeue(Queue Q)
{
if (IsEmpty(Q)) {
printf("Empty Queue!\n");
exit(-1);
}
Q->Size--;
ElementType TmpCell = Q->Array[Q->Front];
Q->Front = Succ(Q->Front, Q);
return TmpCell;
}