⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linkedqueue.h

📁 这是一个银行模拟系统
💻 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 + -