【十三】队列的链式存储结构

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值