Files

66 lines
1.5 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//队列工具
template <class DT>
struct SqQueue // 顺序队类
{
BTNode<DT>* *base; // 队列首址
int front; // 队头指针
int rear; // 队尾指针
int queuesize; // 队容量
};
//【算法3.14】 初始化队列
template <class DT>
void InitQueue(SqQueue<DT> &Q, int m)
{
Q.base=new BTNode<DT>*[m]; // 申请队列空间
if(Q.base==NULL) // 申请空间失败
{
cout<<"未创建成功!";
exit (1); // 退出
}
Q.front=Q.rear=0; // 设置队列属性
Q.queuesize=m;
}
//算法3.15】 销毁列列
template <class DT>
void DestroyQueue(SqQueue<DT> &Q)
{
delete [] Q.base; // 释放队列空间
Q.front=Q.rear=0; // 设置队列属性
Q.queuesize=0;
}
//【算法3.16】 入队
template<class DT>
bool EnQueue(SqQueue<DT> &Q,BTNode<DT>* e)
{
if((Q.rear+1)%Q.queuesize==Q.front) // 队满
return false; // 返回false
Q.base[Q.rear]=e; // 出队
Q.rear=(Q.rear+1)% Q.queuesize; // 修改队列属性
return true; // 返回true
}
//【算法3.17】 出队
template<class DT>
bool DeQueue(SqQueue<DT> &Q,BTNode<DT>* &e)
{
if(Q.front==Q.rear) // 队空
return false;
e=Q.base[Q.front];
Q.front=(Q.front+1)%Q.queuesize;
return true; // 删除成功返回true
}
// 测队空
template<class DT>
bool QueueEmpty(SqQueue<DT> Q)
{
if(Q.front==Q.rear) // 队空
return true; // 返回true
else // 队不空
return false; // 返回false
}