📄 linkedqueue.h
字号:
#ifndef LinkedQueue_H
#define LinkedQueue_H
#include <stdlib.h>
#include "Node.h"
template<class T>
class LinkedQueue{
//friend BinaryTree<T>;
//friend BinaryTreeNode<T>;
// FIFO对象
public:
LinkedQueue() { front = rear = 0;} // 构造函数
~LinkedQueue(); // 析构函数
void MakeEmpty();
bool IsEmpty() const
{
return ((front) ? false : true);
}
bool IsFull() const;
T GetFront() const; // 返回第一个元素
T Last() const; // 返回最后一个元素
LinkedQueue<T>& EnQueue(const T& x);
T DeQueue();
void dump();
void OutOfBounds() { cerr << "\n operation failure !\n"; }
private:
Node<T> *front; // 指向第一个节点
Node<T> *rear;//指向最后一个节点
};
template<class T>
void LinkedQueue<T>::MakeEmpty()
{
Node<T> *empty;
while(front){
empty = front->link;
delete front ;
front = empty;
}
}
template<class T>
LinkedQueue<T>:: ~LinkedQueue()
{// 队列析构函数,删除所有节点
Node<T> *next;
while (front){
next = front->link;
delete front;
front = next;
}
}
template<class T>
bool LinkedQueue<T>::IsFull() const
{// 判断队列是否已满
Node<T> *p;
try {p = new Node<T>;
delete p;
return false;}
catch (NoMem) {return true;}
}
template<class T>
T LinkedQueue<T>::GetFront() const
{// 返回队列的第一个元素
// 如果队列为空,则引发异常OutOfBounds
if (IsEmpty())
//throw OutOfBounds();
return false;
return front->data;
}
template<class T>
T LinkedQueue<T>::Last() const
{// 返回队列的最后一个元素
// 如果队列为空,则引发异常OutOfBounds
if (IsEmpty()) //throw OutOfBounds();
return false;
return rear->data;
}
template<class T>
LinkedQueue<T>& LinkedQueue<T>::EnQueue(const T& x)
{// 把x 添加到队列的尾部
// 不捕获可能由new引发的NoMem 异常
// 为新元素创建链表节点
Node<T> *p = new Node<T>;
p->data = x;
p->link = 0;
// 在队列尾部添加新节点
if (front) rear->link = p; //队列不为空
else front = p; // 队列为空
rear = p;
return *this;
}
template<class T>
T LinkedQueue<T>::DeQueue()
{// 删除第一个元素,并将其放入x
// 如果队列为空,则引发异常OutOfBounds
if (IsEmpty())
throw OutOfBounds();
//{ cerr<<" 队列为空 请你返回" <<"\n";
//return ;
//}
//保存第一个节点中的元素
T x = front->data;
// 删除第一个节点
Node<T> *p = front;
front = front->link;
delete p;
//return *this;
return x;
}
template<class T>
void LinkedQueue<T>::dump()
{ //显示该链队列
while(! IsEmpty()){
cout<< front->data << " " <<endl;
front = front->link;
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -