1、链式存储的定义
上一篇介绍了队列及其顺序存储,基于上一篇,简介队列的链式存储结构的实现!
2、基于链表的实现
队列是一种特殊的顺序表,所以可以基于链表来实现队列的链式存储结构!
数据结构的定义
//因为内部使用的是顺序链表,所以有如下的定义
typedef struct _struct_linkqueue
{
LinklistNode node;
LinkQueueNode *item;
}TLinkQueueNode;
部分代码:
/*
创建一个队列
如果成功,返回一个队列指针,否则返回NULL
*/
LinkQueue *LinkQueue_Create()
{
return List_Create();
}
/*
销毁一个队列
*/
void LinkQueue_Destroy(LinkQueue *queue)
{
LinkQueue_Clear(queue);
List_Destroy(queue);
}
/*
清空队列中的元素
*/
void LinkQueue_Clear(LinkQueue *queue)
{
while(LinkQueue_Length(queue) > 0)
{
LinkQueue_Retrieve(queue);
}
}
/*
在队尾添加一个元素
如果成功,返回1,失败返回0
*/
int LinkQueue_Append(LinkQueue *queue, LinkQueueNode *item) //O(n)
{
int iret = 1;
//分配内存,存储数据item
TLinkQueueNode *tnode = (TLinkQueueNode*)malloc(sizeof(TLinkQueueNode));
iret = iret && (queue != NULL) && (item != NULL) && (tnode != NULL);
if(iret)
{
//保存真正要存储的数据
tnode->item = item;
//链表尾部作为队列尾部
iret = List_Insert(queue,(LinklistNode*)tnode,List_Length(queue));
}
//如果插入没有成功,则释放tnode
if (!iret)
{
free(tnode);
}
return iret;
}