基于以前的线性表实现,线性表见https://blog.csdn.net/qq_33185566/article/details/99684151
linkqueue.h文件
#include "stdio.h"
#include "stdlib.h"
#include "linklist.h"
typedef void LinkQueue;
typedef struct _tag_LinkQueueNode
{
LinkListNode node;
void* item;
}TLinkQueueNode;
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);
linkqueue.c文件
#include "linkqueue.h"
LinkQueue* LinkQueue_Create()
{
return LinkList_Create();
}
void LinkQueue_Destroy(LinkQueue* queue)
{
LinkQueue_Clear(queue);
LinkList_Destroy(queue);
}
//如果清空队列,需要找出队列中所有的节点以释放,因为添加时分配了内存
void LinkQueue_Clear(LinkQueue* queue)
{
while(LinkQueue_Length(queue) > 0)
{
LinkQueue_Retrieve(queue);
}
LinkList_Clear(queue);
}
//向队列中添加元素
int LinkQueue_Append(LinkQueue* queue,void* item)
{
int ret = 0;
TLinkQueueNode* tem = NULL;
tem = (TLinkQueueNode*)malloc(sizeof(TLinkQueueNode));
if (tem == NULL)
{
return -1;
}
memset(tem,0,sizeof(TLinkQueueNode));
tem->item = item;
ret = LinkList_Insert(queue,(LinkListNode*)tem,LinkList_Length(queue));
if (ret != 0)
{
if (tem != NULL)
{
free(tem);
}
return -1;
}
return 0;
}
//从队列中删除元素(头部)
void* LinkQueue_Retrieve(LinkQueue* queue)
{
TLinkQueueNode* tem = NULL;
void* ret = NULL;
tem = (TLinkQueueNode*)LinkList_Delete(queue,0);
if (tem == NULL)
{
return NULL;
}
ret = tem->item;
free(tem);
return ret;
}
//获取队列头
void* LinkQueue_Header(LinkQueue* queue)
{
TLinkQueueNode* tem = NULL;
tem = (TLinkQueueNode*)LinkList_Get(queue,0);
if (tem == NULL)
{
return NULL;
}
return tem->item;
}
//获取队列长队
int LinkQueue_Length(LinkQueue* queue)
{
return LinkList_Length(queue);
}
main.c文件
#include "linkqueue.h"
int main()
{
int i = 0;
int a[10];
LinkQueue* queue = NULL;
queue = LinkQueue_Create();
if (queue == NULL)
{
return 0;
}
for (i = 0;i < 5;i++)
{
a[i] = i + 1;
LinkQueue_Append(queue,&a[i]);
}
printf("len:%d\n",LinkQueue_Length(queue));
printf("header:%d\n",*((int*)LinkQueue_Header(queue)));
while(LinkQueue_Length(queue) > 0)
{
int tem = *((int*)LinkQueue_Retrieve(queue));
printf("tem:%d ",tem);
}
printf("\n");
LinkQueue_Destroy(queue);
system("pause");
return 1;
}
输出结果: