标题 内容 编者 炎芯随笔 发布时间 2020年8月26日13:53:31 版本 V-1.0
1.前言
2.循环队列实现
2.1.头文件
#pragma once
using namespace std;
typedef struct stPackHead
{
int dataLen;
} stPackHead;
typedef struct
{
stPackHead head;
char data[ 64 * 1024 * 1024 ] ;
} _DATA, * pDATA;
typedef struct queue
{
_DATA * pBase;
int front;
int rear;
int maxsize;
} QUEUE, * PQUEUE;
bool CreateQueue ( PQUEUE Q, int maxsize) ;
bool FullQueue ( PQUEUE Q) ;
bool EmptyQueue ( PQUEUE Q) ;
int GetQueueSize ( ) ;
bool Enqueue ( PQUEUE Q, _DATA* data) ;
bool Dequeue ( PQUEUE Q, _DATA * data) ;
bool Clequeue ( PQUEUE Q) ;
void DestroyQueue ( PQUEUE Q) ;
2.1.实现文件
#include "stdafx.h"
#include "C_SingleCircuList.h"
_DATA * g_pBase;
int g_queue_size;
项目 内容 函数名 CreateQueue 函数参数 PQUEUE Q, int maxsize 功能说明 创建队列 使用情况 布尔值 示例 参见如下代码
bool CreateQueue ( PQUEUE Q, int maxsize)
{
Q- > pBase = ( _DATA* ) malloc ( sizeof ( _DATA) * maxsize) ;
if ( ! Q- > pBase)
{
TRACE ( "malloc error\n" ) ;
AfxMessageBox ( _T ( "创建队列失败" ) ) ;
exit ( - 1 ) ;
return false ;
}
#if 0
if ( NULL == Q- > pBase)
{
TRACE ( "Memory allocation failure\n" ) ;
exit ( - 1 ) ;
}
#endif
g_pBase = Q- > pBase;
memset ( Q- > pBase, 0 , sizeof ( _DATA) * maxsize) ;
Q- > front = 0 ;
Q- > rear = 0 ;
Q- > maxsize = maxsize;
g_queue_size = 0 ;
return true ;
}
项目 内容 函数名 Enqueue 函数参数 PQUEUE Q, _DATA* data 功能说明 入队操作 使用情况 布尔值 示例 参见如下代码
bool Enqueue ( PQUEUE Q, _DATA* data)
{
if ( ! data)
{
TRACE ( "data error!!!\n" ) ;
return false ;
}
else if ( FullQueue ( Q) )
{
TRACE ( "FullQueue!!!\n" ) ;
return false ;
}
else
{
memset ( ( char * ) & Q- > pBase[ Q- > rear] , 0 , sizeof ( _DATA) ) ;
memcpy ( ( char * ) & Q- > pBase[ Q- > rear] , ( char * ) data, sizeof ( _DATA) ) ;
Q- > rear = ( Q- > rear + 1 ) % Q- > maxsize;
g_queue_size++ ;
return true ;
}
}
项目 内容 函数名 Dequeue 函数参数 PQUEUE Q, _DATA* data 功能说明 出队操作 使用情况 布尔值 示例 参见如下代码
bool Dequeue ( PQUEUE Q, _DATA * data)
{
if ( EmptyQueue ( Q) )
{
return false ;
}
else
{
memcpy ( data, ( char * ) & Q- > pBase[ Q- > front] , sizeof ( _DATA) ) ;
Q- > front = ( Q- > front + 1 ) % Q- > maxsize;
g_queue_size-- ;
return true ;
}
}
项目 内容 函数名 Clequeue 函数参数 PQUEUE Q 功能说明 清空队列 使用情况 布尔值 示例 参见如下代码
bool Clequeue ( PQUEUE Q)
{
if ( EmptyQueue ( Q) )
{
return false ;
}
else
{
Q- > front = 0 ;
Q- > rear = 0 ;
g_queue_size = 0 ;
return true ;
}
}
项目 内容 函数名 DestroyQueue 函数参数 PQUEUE Q 功能说明 销毁队列操作 使用情况 void 示例 参见如下代码
void DestroyQueue ( PQUEUE Q)
{
if ( g_pBase)
{
free ( g_pBase) ;
}
}
项目 内容 函数名 FullQueue 函数参数 PQUEUE Q 功能说明 判断队列是否已填满 使用情况 void 示例 参见如下代码
bool FullQueue ( PQUEUE Q)
{
if ( Q- > front == ( Q- > rear + 1 ) % Q- > maxsize)
return true ;
else
return false ;
}
项目 内容 函数名 EmptyQueue 函数参数 PQUEUE Q 功能说明 判断队列是否已填空 使用情况 void 示例 参见如下代码
bool EmptyQueue ( PQUEUE Q)
{
if ( Q- > front == Q- > rear)
return true ;
else
return false ;
}
项目 内容 函数名 GetQueueSize 函数参数 void 功能说明 获取队列的大小 使用情况 void 示例 参见如下代码
int GetQueueSize ( )
{
return g_queue_size;
}