队列

来源:互联网 发布:每一个明天 知乎 编辑:程序博客网 时间:2024/05/16 09:11
//顺序存储://头文件:template<class T>class AQueue{ private:  int front;  int rear;  int count;  T *QArray;  int size; public:  AQueue(int MaxQueueSize  = 10);  ~AQueue(void) {delete [] QArray;}  bool QInsert(const T& item);  bool QDelete(T &item);  void QClear(void) {front = rear = count = 0;}  T QFront(void) const;  bool isEmpty(void) const {return count == 0;}  bool isFull(void) const {return count == size;}  bool QFront(T &item);};//源文件:#include "AQueue.h"template <class T>AQueue<T>::AQueue(int MaxQueueSize){ size = MaxQueueSize; QArray = new T[MaxQueueSize]; front = 0; rear = 0; count = 0;}template <class T>bool AQueue<T>::QInsert(const T& item){ if (isFull()) {  cout<<"inserting into a full queue"<<endl;  return false; } QArray[rear] = item; rear = (rear+1)%size; cout ++; return true;}template <class T>bool AQueue<T>::QDelete(T &item){ if (isEmpty()) {  cout<<"deleting from an empty queue"<<endl;  return false; } item = QArray[front]; front = (front+1)%size; count --; return true;}template <class T>bool AQueue<T>::QFront(T &item){ if (isEmpty()) {  count<<"reading from an empty queue"<<endl;  return false; } item = QArray[front]; return true;}//链式存储://头文件:#include "SLList.h"template <class T>class LQueue{ private:  int size;  SLNode <T> *front;   SLNode <T> *rear; public:  LQueue(void) {front = rear = NULL; size = 0; }  ~LQueue(void){QClear();}  void QInsert(const T&item);  bool QDelete(T &item);  bool QFront(T &item) const;  int IsEmpty(void) const {return front == NULL;}  void QClear();  };//源文件:#include "LQueue.h"template<class T>void LQueue<T>::QInsert(const T&item){ if (IsEmpty()) {  front = rear = new SLNode<T>(item, NULL);  size = 1;     } else {  rear->next = new SLNode<T>(item, NULL);  rear = rear->next;  size ++; }};template<class T>bool LQueue<T>::QDelete(T &item){ if (IsEmpty()) {  cout<<"delete from an empty queue"<<endl;  return false; } SLNode<T> *temp = front; item = temp->data; front = front->next; cout --; delete temp; if (size == 0) rear = NULL; return true; };template<class T>bool LQueue<T>::QFront(T &item) const{ if (IsEmpty()) {  cout<<"reading from an empty queue"<<endl;  return false; } item = front->data; return true;};template<class T>void LQueue<T>::QClear(){ while (!IsEmpty()) {  rear = front;  front = front->next;  delete rear;  size --; } rear = NULL;}; 

0 0
原创粉丝点击