阅读:2371回复:4
给大家个见面礼!!好的话顶啊!
/*---------------------------------------------*
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 ); } |
|
|
1楼#
发布于:2003-08-29 10:48
顶顶
|
|
|
2楼#
发布于:2003-09-13 23:46
ding
|
|
|
3楼#
发布于:2003-09-14 01:06
程序写得不错
|
|
4楼#
发布于:2003-09-14 15:34
顶
|
|