📄 queue.c
字号:
#include "queue.h"
#include "const.h"
#include <stdlib.h>
#define MinQueueSize ( 2 )
struct QueueRecord
{
int Capacity;
int Front;
int Rear;
int Size;
ElementType *Array;
};
int
IsEmpty( Queue Q )
{
return Q->Size == 0;
}
int
IsFull( Queue Q )
{
return Q->Size == Q->Capacity;
}
Queue
CreateQueue( int MaxElements )
{
Queue Q;
if( MaxElements < MinQueueSize )
{
if(debug_flag)
printf( "Queue size is too small" );
}
Q = malloc( sizeof( struct QueueRecord ) );
if( Q == NULL )
return Q;
Q->Array = malloc( sizeof( ElementType ) * MaxElements );
if( Q->Array == NULL )
return Q;
Q->Capacity = MaxElements;
MakeEmpty( Q );
return Q;
}
void
MakeEmpty( Queue Q )
{
Q->Size = 0;
Q->Front = 1;
Q->Rear = 0;
}
void
DisposeQueue( Queue Q )
{
if( Q != NULL )
{
free(Q->Array);
free( Q );
}
}
static int
Succ( int Value, Queue Q )
{
if( ++Value == Q->Capacity )
Value = 0;
return Value;
}
void
Enqueue( ElementType X, Queue Q )
{
if( IsFull( Q ) )
{
if(debug_flag)
printf( "Full queue" );
}
else
{
Q->Size++;
Q->Rear = Succ( Q->Rear, Q );
Q->Array[ Q->Rear ] = X;
}
}
ElementType
Front( Queue Q )
{
if( !IsEmpty( Q ) )
return Q->Array[ Q->Front ];
if(debug_flag)
printf( "Empty queue" );
return 0; /* Return value used to avoid warning */
}
void
Dequeue( Queue Q )
{
if( IsEmpty( Q ) )
{
if(debug_flag)
printf( "Empty queue" );
}
else
{
Q->Size--;
Q->Front = Succ( Q->Front, Q );
}
}
ElementType
FrontAndDequeue( Queue Q )
{
ElementType X = 0;
if( IsEmpty( Q ) )
{
if(debug_flag)
printf( "Empty queue" );
}
else
{
Q->Size--;
X = Q->Array[ Q->Front ];
Q->Front = Succ( Q->Front, Q );
}
return X;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -