linkQueue简单实现

// linkqueue.h
#ifndef SEQQUEUE_H_INCLUDED
#define SEQQUEUE_H_INCLUDED
typedef void linkQueue;

linkQueue* linkQueue_Create();

void linkQueue_Destroy(linkQueue* queue);

void linkQueue_Clear(linkQueue* queue);

int linkQueue_Append(linkQueue* queue, void* item);

void* linkQueue_Retrieve(linkQueue* queue);

void* linkQueue_Header(linkQueue* queue);

int linkQueue_Length(linkQueue* queue);

#endif // SEQQUEUE_H_INCLUDED
// linkqueue.c
#include <stdio.h>
#include <stdlib.h>
#include "linkqueue.h"
#include "linkList.h"

typedef struct _linkQueueNode
{
    linkListNode node;
    void *item;
}linkQueueNode;


linkQueue* linkQueue_Create()
{
    return Creat();
}

void linkQueue_Destroy(linkQueue* queue)
{
    linkQueue_Clear(queue);
    Destroy(queue);
}

void linkQueue_Clear(linkQueue* queue)
{
    while(linkQueue_Length(queue) > 0)
    {
        linkQueue_Retrieve(queue);
    }
}

int linkQueue_Append(linkQueue* queue, void* item)
{
    linkQueueNode * tmp =  (linkQueueNode*) malloc(sizeof(linkQueueNode));
    if(tmp == NULL)
        return -1;
    //缓存起来
    tmp->item = item;
    int ret =  Insert(queue, (linkListNode*)tmp, Length(queue));
    if(ret !=0 )
    {
        free(tmp);
        printf("linkList Insert Err: %d\n",ret);
        return ret;
    }
    return 0;

}

void* linkQueue_Retrieve(linkQueue* queue)
{
    linkQueueNode * tmp = (linkQueueNode *)Delete(queue, 0);
    if(tmp==NULL)
    {
        return NULL;
    }
    void *item =  tmp->item;
    free(tmp);
    return item;
}

void* linkQueue_Header(linkQueue* queue)
{
    linkQueueNode* tmp = (linkQueueNode*)Get(queue, 0);
    if(tmp==NULL)
        return NULL;
    return tmp->item;
}

int linkQueue_Length(linkQueue* queue)
{
    return Length(queue);
}

除了适配这一环节,其他部分都是调用底层linkList的函数。

猜你喜欢

转载自www.cnblogs.com/randyniu/p/9192071.html