时间:2021-05-19
复制代码 代码如下:
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <assert.h>
#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;
}
}
bool QueueEmpty(LinkQueue Q)
{
if(Q.front == Q.rear)
return true;
return false;
}
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;
}
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
队列类链式存储代码:linkqueue.hpp?12345678910111213141516171819202122232425262728293031323
C++实现队列,如有不足之处,还望指正复制代码代码如下://MyQueue.cpp:定义控制台应用程序的入口点。//实现链式队列(queue),包括一个头结点。
java数据结构之栈与队列一:对列队列是一种先进先出的数据结构实现代码:packageQueue;/**使用java构建队列,并模拟实现队列的入队和出对方法*/
本文介绍了java多线程消息队列的实现代码,分享给大家,希望对大家有帮助,顺便也自己留个笔记1、定义一个队列缓存池://static修饰的成员变量和成员方法独立
本文实例讲述了Winform动态加载TabControl用法。分享给大家供大家参考。具体实现代码如下:复制代码代码如下:privatevoidBindTabDa