引言:
队列的实现除了链表外,也可用数组实现。
分析描述:
队列的结构:
typedef int ElementType;
typedef struct QueueRecord{
int Capacity;
int Front;
int Rear;
int Size;
ElementType *Array;
}QueueRecord, *Queue;
创建队列:
void MakeEmpty(Queue Q)
{
Q->Size = 0;
Q->Front = 1;
Q->Rear = 0;
}
Queue CreateQueue(int MaxElements)
{
Queue QueueHead = (Queue)malloc(sizeof(struct QueueRecord));
if(QueueHead == NULL){
fprintf(stderr, "out of sapce .\n");
exit(0);
}
QueueHead->Array = (ElementType *)malloc(sizeof(ElementType)*MaxElements);
if(QueueHead->Array == NULL){
fprintf(stderr, "Out of sapce .\n");
}
QueueHead->Capacity = MaxElements;
MakeEmpty(QueueHead);
return QueueHead;
}
判断队列为空或队列已满:
int IsEmpty(Queue Q)
{
return Q->Size == 0;
}
int IsFull(Queue Q)
{
return Q->Size == Q->Capacity;
}
入队列:
static int
Succ(int Value, Queue Q)
{
if(++Value == Q->Capacity)
Value = 0;
return Value;
}
void Enqueue(ElementType data, Queue Q)
{
if(IsFull(Q))
fprintf(stderr, "full queue.\n");
else{
Q->Size++;
Q->Rear = Su(Q->Rear, Q);
Q->Array[Q->Rear] = X;
}
}
出队列:
void Dequeue(Queue Q)
{
if(IsEmpty(Q))
fprintf(stderr, "Empty queue.\n");
else{
Q->Size--;
Q->Front = Succ(Q->Front, Q);
}
}