自定义模板类(循环队列)
生活随笔
收集整理的這篇文章主要介紹了
自定义模板类(循环队列)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
自定義模板類——循環鏈表
正做的這個鏈表的時候,遇到了,對于友元函數的處理問題
實現代碼如下(配有測試main):
#include <iostream> using namespace std;template<class T> class SeqQueue{ public:SeqQueue(int sz = 0);~SeqQueue(){if (element != NULL) delete[]element;}bool EnQueue(const T& x);bool DeQueue();bool getFront(T& x);void setEmpty();bool isEmpty()const;bool isFull()const;template<class U>friend ostream& operator << (ostream& os,const SeqQueue<U>& s); private:T *element;int front,rear,maxsize; }; template<class T> SeqQueue<T>::SeqQueue(int sz){if (!sz){element = NULL;} else {element = new T[sz];}front = rear = 0;maxsize = sz; }template<class T> bool SeqQueue<T>::EnQueue(const T &x){if (isFull())return false;element[rear] = x;rear = (rear + 1) % maxsize;return true; }template<class T> bool SeqQueue<T>::DeQueue(){if(isEmpty())return false;front = (front + 1) % maxsize;return true; }template<class T> bool SeqQueue<T>::isEmpty()const{return front == rear; } template<class T> bool SeqQueue<T>::isFull()const{return (rear+1) % maxsize == front; } template<class T> bool SeqQueue<T>::getFront(T& x){if (isEmpty())return false;x = element[front];return true; }template<class T> void SeqQueue<T>::setEmpty(){front = rear = 0; }template<class U> ostream& operator << (ostream& os,const SeqQueue<U>& s){os << "front = "<< s.front<< ", rear = "<< s.rear<< endl;for (int i = s.front;i != s.rear;i = (i + 1) % s.maxsize){if (i != s.front){os << "->";}os << s.element[i];}return os; }int main(){SeqQueue<int> s(10);for (int i = 0; i < 10; ++i)s.EnQueue(i *123 - 12);cout << s<< endl;for (int i = 0; i < 5; ++i)s.DeQueue();cout << s<< endl; }總結
以上是生活随笔為你收集整理的自定义模板类(循环队列)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 栈的逆转(递归实现)
- 下一篇: SeqStack(Templatecla