袁绍伦
路人甲
路人甲
  • 注册日期2003-08-08
  • 发帖数654
  • QQ164646905
  • 铜币1336枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2207回复:4

给大家个见面礼!!好的话顶啊!

楼主#
更多 发布于:2003-08-23 01:09
/*---------------------------------------------*
QUEUE.H
 *---------------------------------------------*/
#define QUEUE_NAME_LEN 32
typedef struct {
char * start;
int head;
int tail;
int size;
int nobj;
int objsize;
char name[ QUEUE_NAME_LEN + 1 ];
} QUEUE;
/*基本功能服务函数*/
QUEUE * MakeQueue( int qsize, int objsize ); /*建立队列并返回其指针,qsize为队列元素个数,objsize为单个元素占用的字节数*/
int DelQueue( QUEUE *qp ); /*删除整个队列,其中qp为需要删除的队列指针*/
int EnterQueue( char * obj, QUEUE * qp ); /*在队列中加入一新元素,obj为元素指针,qp为队列指针*/
int GetElementQueue( char * obj, QUEUE * qp ); /*从队列中取出一个新元素*/
int SpAvailQueue( QUEUE *qp ); /*获取队列中剩余的元素容量*/
/*扩展功能服务函数*/
int SpUsedQueue( QUEUE * qp ); /*获取对列中已使用掉的元素容量*/
char  * ShowNextQueue( QUEUE * qp ); /*显示队列中下一个预备出列元素的内容*/
int EnterHeadQueue( char * obj, QUEUE * qp ); /*从队列的出口端压入一个元素*/
int DeleteTailQueue( char * obj, QUEUE * qp ) ; /*从队列的入口删除一个元素*/
【清单2-2】通用型队列模块的源程序
/*---------------------------------------------*
QUEUE.C  Yang Dongyuan 1990.11
 *---------------------------------------------*/
#include <stdio.h>
#include <malloc.h>
#include "queue.h"

QUEUE * MakeQueue( int qsize, int objsize )
{
QUEUE * qp;

if( !( qp = ( QUEUE * )malloc( sizeof( QUEUE ) + qsize * objsize )
) )
return( NULL );
qp->start = ( char * )( qp + 1 );
qp->size = qsize;
qp->objsize = objsize;
qp->head = 0;
qp->tail = 0;
qp->nobj = 0;
return( qp );
}

int DelQueue( QUEUE *qp )
{
if( qp->nobj )
return( 0 );
free( qp );
return( 1 );
}

int EnterQueue( char * obj, QUEUE * qp )
{
int i;
char * bp;

if( qp->nobj >= qp->size )
return( 0 );
qp->nobj ++;
bp = qp->start + ( qp->objsize * qp->tail );
for( i = qp->objsize; -- i >= 0; *bp++ = *obj ++ )
;
if( ++ qp->tail >= qp->size )
qp->tail = 0;
return( 1 );
}

int DeleteTailQueue( char * obj, QUEUE * qp )
{
int i;
char * bp;

if( qp->nobj <= 0 )
return( 0 );
qp->nobj --;
if( -- qp->tail < 0 )
qp->tail = qp->size - 1;
bp = qp->start + ( qp->objsize * qp->tail );
for( i = qp->objsize; -- i >= 0; *obj++ = *bp ++ )
;
return( 1 );
}

int EnterHeadQueue( char * obj, QUEUE * qp )
{
short i;
char * bp;

if( qp->nobj >= qp->size )
return( 0 );
qp->nobj ++;
if( -- qp->head < 0 )
qp->head = qp->size - 1;
bp = qp->start + ( qp->objsize * qp->head );
for( i = qp->objsize; -- i >= 0; *bp++ = *obj ++ )
;
return( 1 );
}

int GetElementQueue( char * obj, QUEUE * qp )
{
short i;
char  *bp;

if( qp->nobj <= 0 )
return( 0 );
qp->nobj --;
bp = qp->start + ( qp->objsize * qp->head );
for( i = qp->objsize; --i >= 0; *obj ++ = *bp ++ )
;
if( ++ qp->head >= qp->size )
qp->head = 0;
return( 1 );
}

char  * ShowNextQueue( QUEUE * qp )
{
return( qp->start + ( qp->head * qp->objsize ) );
}

int SpUsedQueue( QUEUE * qp )
{
return ( qp->nobj );
}

short SpAvailQueue( QUEUE *qp )
{
return( qp->size - qp->nobj );
}
喜欢0 评分0
愿意和大家交朋友! QQ:47559983 MSN:shaolun_yuan@hotmail.com eMail:shaolun-yuan@163.com
再别康桥
路人甲
路人甲
  • 注册日期2003-08-16
  • 发帖数268
  • QQ
  • 铜币760枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2003-08-29 10:48
顶顶
轻轻的我一如天边的云 轻轻的走过你的身旁 在你的心中划下淡淡的痕 难忘 ------------------------------------- http://www.21trip.com 世纪之旅欢迎您!!
举报 回复(0) 喜欢(0)     评分
he_young
路人甲
路人甲
  • 注册日期2003-09-13
  • 发帖数221
  • QQ
  • 铜币4枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2003-09-13 23:46
ding
QQ:11716903 email:he_young@163.net ************************************** 不要去想我是谁,因为我在那个你看不到的黑暗角落 我来了,我也会走 就像你来了,你也会走...
举报 回复(0) 喜欢(0)     评分
lipengzhu
路人甲
路人甲
  • 注册日期2003-09-14
  • 发帖数58
  • QQ
  • 铜币217枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2003-09-14 01:06
程序写得不错
举报 回复(0) 喜欢(0)     评分
hsylovelzr
路人甲
路人甲
  • 注册日期2003-07-30
  • 发帖数48
  • QQ
  • 铜币207枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2003-09-14 15:34
举报 回复(0) 喜欢(0)     评分
游客

返回顶部