這次實作FIFO和LIFO。有了ZListClass清單類,實作隊列類就很簡單了。調用ZListClass的方法就能實作了。
先進先出隊列 ZFifoClass.h #ifndef _BLACKSPOOR_ZFIFOCLASS_H_
#define _BLACKSPOOR_ZFIFOCLASS_H_ #include "ZListClass.h" typedef struct ZFifoClass
{
ZListClass * fifo; void (*Push)(struct ZFifoClass *, void *);
void * (*Pop)(struct ZFifoClass *); void (*Init)(struct ZFifoClass *);
void (*Dispose)(struct ZFifoClass *); }ZFifoClass; extern ZFifoClass * ZFifoClassCreate(void); #endif
ZFifoClass.c
#include "ZFifoClass.h" static void Init(struct ZFifoClass * stu, void * tag);
static void Dispose(struct ZFifoClass * stu);
static void Push(struct ZFifoClass *, void *);
static void * Pop(struct ZFifoClass *); static void Init(struct ZFifoClass * stu, void * tag)
{
stu->fifo = ZListClassCreate();
stu->fifo->Init(stu->fifo);
} static void Dispose(struct ZFifoClass * stu)
{
stu->fifo->Dispose(stu->fifo);
free(stu);
} static void Push(struct ZFifoClass * stu, void * content)
{
ZListItemClass * zinsertitem = ZListItemClassCreate();
zinsertitem->content = content;
stu->fifo->PushItem(stu->fifo,zinsertitem);
} static void * Pop(struct ZFifoClass * stu)
{
return stu->fifo->PopItem(stu->fifo);
}
ZFifoClass * ZFifoClassCreate(void)
{
ZFifoClass * stu = (ZFifoClass *)malloc(sizeof(ZFifoClass)); stu->Init = Init;
stu->Dispose = Dispose;
stu->Push = Push;
stu->Pop = Pop; return stu;
}
後進先出隊列 ZLifoClass.h #ifndef _BLACKSPOOR_ZLIFOCLASS_H_
#define _BLACKSPOOR_ZLIFOCLASS_H_ #include "ZListClass.h" typedef struct ZLifoClass
{
ZListClass * fifo; void (*Push)(struct ZLifoClass *, void *);
void * (*Pop)(struct ZLifoClass *); void(*Init)(struct ZLifoClass *);
void(*Dispose)(struct ZLifoClass *); }ZLifoClass; extern ZLifoClass * ZLifoClassCreate(void); #endif
ZLifoClass.c
#include "ZLifoClass.h" static void Init(struct ZLifoClass * stu, void * tag);
static void Dispose(struct ZLifoClass * stu);
static void Push(struct ZLifoClass *, void *);
static void * Pop(struct ZLifoClass *); static void Init(struct ZLifoClass * stu, void * tag)
{
stu->fifo = ZListClassCreate();
stu->fifo->Init(stu->fifo);
} static void Dispose(struct ZLifoClass * stu)
{
stu->fifo->Dispose(stu->fifo);
free(stu);
} static void Push(struct ZLifoClass * stu, void * content)
{
ZListItemClass * zinsertitem = ZListItemClassCreate();
zinsertitem->content = content;
stu->fifo->AppendItem(stu->fifo, zinsertitem);
} static void * Pop(struct ZLifoClass * stu)
{
return stu->fifo->PopItem(stu->fifo);
}
ZLifoClass * ZLifoClassCreate(void)
{
ZLifoClass * stu = (ZLifoClass *)malloc(sizeof(ZLifoClass)); stu->Init = Init;
stu->Dispose = Dispose;
stu->Push = Push;
stu->Pop = Pop; return stu;
}