⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 queue.c

📁 一个minigui 工程框架,需要windows 下的minigui 开发环境
💻 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 + -