天天看點

c語言面向對象:隊列 (先進先出,後進先出)

這次實作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;

}