队列
来源:互联网 发布:每一个明天 知乎 编辑:程序博客网 时间: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