practice1.h
#ifndef PRACTICE1_H_INCLUDED #define PRACTICE1_H_INCLUDED #include<iostream> template <class T> class Queue{ public: Queue();//构造函数 ~Queue();//析构函数 bool isEmpty() const;//判断是否为空 const T& getFront() const;//得到队首数据不删除 void enqueue(const T& x);//进队列 T dequeue();//删除队首数据 且得到队首数据 void makeEmpty();//清空队列 private: struct ListNode//结构体嵌套 也可以用友元类 { T element;//数据域 ListNode *next;//指针域 ListNode(const T & theElement,ListNode *n=0)//构造函数 :element(theElement),next(n) {} }; ListNode *front;//对头指针 ListNode *back;//队尾指针 }; template<class T> Queue<T>::Queue() { front=0; back=0; } template<class T> Queue<T>::~Queue() { makeEmpty(); } template<class T> void Queue<T>::makeEmpty() { while(!isEmpty()) dequeue(); } template<class T> bool Queue<T>::isEmpty()const { return front==0; } template <class T> const T& Queue<T>::getFront() const { if(isEmpty()) { throw "queue is empty"; } return front->element; } template<class T> void Queue<T> ::enqueue(const T & x) { if(isEmpty()) back=front=new ListNode(x); else back=back->next=new ListNode(x); } template<class T> T Queue<T>::dequeue() { T frontItem=getFront(); ListNode *old=front; front=front->next; delete old; std::cout<<frontItem<<std::endl; } #endif // PRACTICE1_H_INCLUDED
practice2.cpp
#ifndef PRACTICE1_H_INCLUDED #define PRACTICE1_H_INCLUDED #include<iostream> template <class T> class Queue{ public: Queue();//构造函数 ~Queue();//析构函数 bool isEmpty() const;//判断是否为空 const T& getFront() const;//得到队首数据不删除 void enqueue(const T& x);//进队列 T dequeue();//删除队首数据 且得到队首数据 void makeEmpty();//清空队列 private: struct ListNode//结构体嵌套 也可以用友元类 { T element;//数据域 ListNode *next;//指针域 ListNode(const T & theElement,ListNode *n=0)//构造函数 :element(theElement),next(n) {} }; ListNode *front;//对头指针 ListNode *back;//队尾指针 }; template<class T> Queue<T>::Queue() { front=0; back=0; } template<class T> Queue<T>::~Queue() { makeEmpty(); } template<class T> void Queue<T>::makeEmpty() { while(!isEmpty()) dequeue(); } template<class T> bool Queue<T>::isEmpty()const { return front==0; } template <class T> const T& Queue<T>::getFront() const { if(isEmpty()) { throw "queue is empty"; } return front->element; } template<class T> void Queue<T> ::enqueue(const T & x) { if(isEmpty()) back=front=new ListNode(x); else back=back->next=new ListNode(x); } template<class T> T Queue<T>::dequeue() { T frontItem=getFront(); ListNode *old=front; front=front->next; delete old; std::cout<<frontItem<<std::endl; } #endif // PRACTICE1_H_INCLUDED