当前位置:  编程技术>c/c++/嵌入式

队列的动态链式存储实现代码分享

    来源: 互联网  发布时间:2014-10-24

    本文导语:  代码如下:#include #include #include #include #include "DynaLnkQueue.h" /*------------------------------------------------------------操作目的: 初始化队列初始条件: 无操作结果: 构造一个空的队列函数参数:  LinkQueue *Q 待初始化的队列返回值:...

代码如下:

#include
#include
#include
#include
#include "DynaLnkQueue.h"

/*------------------------------------------------------------
操作目的: 初始化队列
初始条件: 无
操作结果: 构造一个空的队列
函数参数:
  LinkQueue *Q 待初始化的队列
返回值:
  bool   操作是否成功
------------------------------------------------------------*/
bool InitQueue(LinkQueue *Q)
{
 Q->front = Q->rear = (QueuePtr)malloc(sizeof(QNode));
 if(!Q->front)
  return false;
 Q->front->next = NULL;
 return true;
}

/*------------------------------------------------------------
操作目的: 销毁队列
初始条件: 队列Q已存在
操作结果: 销毁队列Q
函数参数:
  LinkQueue *Q 待销毁的队列
返回值:
  无
------------------------------------------------------------*/
void DestroyQueue(LinkQueue *Q)
{
 while(Q->front)
 {
  Q->rear = Q->front->next;
  free(Q->front);
  Q->front = Q->rear;
 }
}

/*------------------------------------------------------------
操作目的: 判断队列是否为空
初始条件: 队列Q已存在
操作结果: 若Q为空队列,则返回true,否则返回false
函数参数:
  LinkQueue Q  待判断的队列
返回值:
  bool   是否为空
------------------------------------------------------------*/
bool QueueEmpty(LinkQueue Q)
{
 if(Q.front == Q.rear)
  return true;
 return false;
}

/*------------------------------------------------------------
操作目的: 得到队列的长度
初始条件: 队列Q已存在
操作结果: 返回Q中数据元素的个数
函数参数:
  LinkQueue Q  队列Q
返回值:
  int    数据元素的个数
------------------------------------------------------------*/
int QueueLength(LinkQueue Q)
{
 ElemType count=0;
 QueuePtr p = Q.front->next;
 while(p->next != NULL)
 {
  ++count;
  p = p->next;
 }
 return count;
}

/*------------------------------------------------------------
操作目的: 得到队列首元素
初始条件: 队列Q已存在
操作结果: 用e返回队列首元素
函数参数:
  LinkQueue Q  队列Q
  ElemType *e  队列首元素的值
返回值:
  bool   操作是否成功
------------------------------------------------------------*/
bool GetHead(LinkQueue Q, ElemType *e)
{
 if(QueueEmpty(Q) == false)
 {
  e = &Q.front->next->data;
  return true;
 }
 return false;
}

/*------------------------------------------------------------
操作目的: 遍历队列
初始条件: 队列Q已存在
操作结果: 依次对Q的每个元素调用函数fp
函数参数:
  LinkQueue Q  队列Q
  void (*fp)() 访问每个数据元素的函数指针
返回值:
  无
------------------------------------------------------------*/
void QueueTraverse(LinkQueue Q, void (*fp)(ElemType))
{
 QueuePtr p = Q.front->next;
 while(p->next != NULL)
 {
  visit(p->data);
  p = p->next;
 }
}

/*------------------------------------------------------------
操作目的: 清空队列
初始条件: 队列Q已存在
操作结果: 将队列清空
函数参数:
  LinkQueue *Q 队列Q
返回值:
  无
------------------------------------------------------------*/
void ClearQueue(LinkQueue *Q)
{
 ElemType x=0;
 while(Q->front != Q->rear)
 {
  DeQueue(Q,&x);
  Q->front = Q->front->next;
 }
}

/*------------------------------------------------------------
操作目的: 在队列末尾插入元素e
初始条件: 队列Q已存在
操作结果: 插入元素e作为队列新的尾结点
函数参数:
  LinkQueue *Q  队列Q
  ElemType e  待插入的数据元素
返回值:
  bool   操作是否成功
------------------------------------------------------------*/
bool EnQueue(LinkQueue *Q, ElemType e)
{
 QueuePtr p;
 p = (QueuePtr)malloc(sizeof(QNode));
 if(!p)
  return false;
 p->data = e;
 p->next = NULL;
 Q->rear->next = p;
 Q->rear = p;
 return true;
}

/*------------------------------------------------------------
操作目的: 删除链式队列的头结点
初始条件: 队列Q已存在
操作结果: 删除链式队列的头结点
函数参数:
  LinkQueue *Q  队列Q
  ElemType *e  被删除的数据元素
返回值:
  bool   操作是否成功
------------------------------------------------------------*/
bool DeQueue(LinkQueue *Q, ElemType *e)
{
 QueuePtr p;
 if(Q->front == Q->rear)
  return false;
 p = Q->front->next;
 *e = p->data;
 Q->front->next = p->next;
 if(Q->rear == p)
  Q->rear = Q->front;
 free(p);
 return true;
}


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Queues(队列) 成员 size():返回队列中元素的个数
  • 线程对定长队列和不定长队列的操作
  • C++ Double Ended Queues(双向队列) 成员 Operators:比较和赋值双向队列
  • unix下一个关于消息队列的问题
  • C++ Double Ended Queues(双向队列) 成员 resize():改变双向队列的大小
  • linux 消息队列长度的问题
  • C++ Double Ended Queues(双向队列) 成员 swap():和另一个双向队列交换元素
  • liunx 消息队列的问题
  • C++ Priority Queues(优先队列) 成员 size():返回优先队列中拥有的元素的个数
  • 如何得到网络接口的输出队列的长度?
  • C++ Double Ended Queues(双向队列) 成员 size():返回双向队列中元素的个数
  • 优先级队列服务 httprique
  • C++ Double Ended Queues(双向队列) 成员 assign():设置双向队列的值
  • 请教:写入队列消息的长度问题
  • C++ Queues(队列) 成员 empty():如果队列空则返回真
  • linux下消息队列不阻塞
  • C++ Double Ended Queues(双向队列) 成员 get_allocator():返回双向队列的配置器
  • 有关tasklet和工作队列的问题
  • C++ Priority Queues(优先队列) 成员 top():返回优先队列中有最高优先级的元素
  • 简单消息队列服务 HTTPSQS
  • C++ Double Ended Queues(双向队列) 成员 max_size():返回双向队列能容纳的最大元素个数
  • 关于后台服务进程不能读消息队列的问题?200分求答急急。。。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3