#ifndef __LINK_QUEUE_H__
#define __LINK_QUEUE_H__
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include "TLinkList.h"
typedef void LinkQueue;
typedef struct _tagNode{
LinkListNode node;
void *item;
}LinkQueueNode;
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
#include "linkqueue.h"
#include "TLinkList.h"
LinkQueue * LinkQueue_Create()
{
return LinkList_Create();
}
void LinkQueue_Destroy(LinkQueue *queue)
{
LinkQueue_Clear(queue);
LinkList_Destroy((LinkList *)queue);
}
void LinkQueue_Clear(LinkQueue *queue)
{
while (LinkQueue_Length(queue) > 0)
{
LinkQueue_Retrieve(queue);
}
LinkList_Clear((LinkList *)queue);
}
int LinkQueue_Append(LinkQueue* queue, void *item)
{
LinkQueueNode * tmp = NULL;
int ret = 0;
tmp = (LinkQueueNode *)malloc(sizeof(LinkQueueNode));
if (NULL == tmp)
{
printf("malloc failed!\n");
return -1;
}
memset(tmp, 0, sizeof(LinkQueueNode));
tmp->item = item;
ret = LinkList_Insert((LinkList *)queue, (LinkListNode*)tmp, LinkList_Length((LinkList *)queue));
if (ret != 0)
{
printf("insert error!\n");
if (tmp != NULL)
{
free(tmp);
tmp = NULL;
}
return ret;
}
return ret;
}
void *LinkQueue_Retrieve(LinkQueue *queue)
{
LinkQueueNode * tmp = NULL;
void * ret = NULL;
tmp = (LinkQueueNode *)LinkList_Delete((LinkList*)queue,0);
if (tmp == NULL)
{
printf("delete error!\n");
return NULL;
}
if (tmp != NULL)
{
ret = tmp->item;
free(tmp);
tmp = NULL;
}
return ret;
}
void *LinkQueue_Header(LinkQueue *queue)
{
LinkQueueNode * tmp = NULL;
tmp = (LinkQueueNode *)LinkList_Get((LinkList*)queue, 0);
if (tmp == NULL)
{
printf("LinkList_Get error!\n");
return NULL;
}
return tmp->item;
}
int LinkQueue_Length(LinkQueue* queue)
{
return LinkList_Length((LinkList*)queue);
}
#include "linkqueue.h"
int main(void)
{
LinkQueue *queue = NULL;
int i = 0;
int a[10] = {0};
queue = LinkQueue_Create();
if (NULL == queue)
{
printf("Create error!\n");
return -1;
}
for (i = 0; i < 5;i++)
{
a[i] =i+1;
LinkQueue_Append(queue, (void*)&a[i]);
}
printf("len:%d\n",LinkQueue_Length(queue));
printf("head:%d\n", *(int*)LinkQueue_Header(queue));
while (LinkQueue_Length(queue)>0)
{
printf("retrieve:%d\n", *(int*)LinkQueue_Retrieve(queue));
}
LinkQueue_Destroy(queue);
system("pause");
return 0;
}