队列的模型
像栈一样,队列也是表。与栈不同的是,队列的插入在一端进行,而删除则在另一端进行。
队列的数组实现
队列的类型声明:
#ifndef _Queue_h
struct QueueRecord;
typedef struct QueueRecord *Queue;
int IsEmpty( Queue Q );
int IsFull( Queue Q );
Queue CreateQueue( int MaxElements );
void DisposeQueue( Queue Q );
void MakeEmpty( Queue Q );
void Enqueue( int X, Queue Q );
int Front( Queue Q );
void DeQueue( Queue Q );
int FrontAndDequeue( Queue Q );
#endif
#define MinQueueSize ( 5 )
struct QueueRecord
{
int Capacity;
int Front;
int Rear;
int Size;
int *Array;
};
测试队列是否为空:
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;
}
void EnQueue( int X, Queue Q )
{
if( IsFull( Q ) )
Error( "Full queue" );
else
{
Q->Size++;
Q->Rear = Succ( Q->Rear, Q );
Q->Array[ Q->Rear ] = X;
}
}