Ex7_11.cpp
上传用户:wuzhousb
上传日期:2022-07-12
资源大小:380k
文件大小:2k
源码类别:

书籍源码

开发平台:

Visual C++

  1. //【例7.11】链队类模板。
  2. #include<iostream>
  3. #include<cassert>
  4. using namespace std;
  5. template<typename T>class Queue;
  6. template<typename T>class Node{
  7. T info;
  8. Node *link;     //在类模板Node中使用指向Node的指针可以不加<T>
  9. public:
  10. Node(T data=0,Node *l=NULL);
  11. friend class Queue<T>;
  12. };
  13. template<typename T> Node<T>::Node(T data,Node *l){
  14. info=data;
  15. link=l;
  16. }
  17. template<typename T>class Queue{
  18. Node<T> *front,*rear;    //在其他类中指向Node的指针必须加<T>
  19. public:
  20. Queue(){rear=front=NULL;}      //构造一个空链队
  21. ~Queue();
  22. bool IsEmpty(){ return front==NULL;}  //队空否?
  23. void EnQue(const T &data);      //进队
  24. T DeQue();          //出队
  25. T GetFront();        //查看队头数据
  26. void MakeEmpty();                  //置空队列,与析构逻辑上不同,物理上一样
  27. };
  28. template<typename T>void Queue<T>::MakeEmpty(){
  29. Node<T> *temp;
  30. while(front!=NULL){
  31. temp=front;front=front->link;delete temp;
  32. }
  33. }
  34. template<typename T>Queue<T>::~Queue(){MakeEmpty();}
  35. template<typename T>void Queue<T>::EnQue(const T &data){
  36. if(front==NULL) front=rear=new Node<T>(data,NULL);
  37. else rear=rear->link=new Node<T>(data,NULL);
  38. }
  39. template<typename T>T Queue<T>::DeQue(){
  40. assert(!IsEmpty());
  41. Node<T> *temp=front;
  42. T data=temp->info;                       //取队头结点中的数据
  43. front=front->link;                       //队头出队
  44. delete temp;                             //释放内存空间
  45. return data;
  46. }
  47. template<typename T>T Queue<T>::GetFront(){
  48. assert(!IsEmpty());
  49. return front->info;
  50. }
  51. int main(){
  52. int i;
  53. Queue<char> que;                          //构造一个空链队
  54. char str1[]="abcdefghijklmnop";           //17个元素,包括串结束符
  55. for(i=0;i<17;i++) que.EnQue(str1[i]);
  56. for(i=0;i<17;i++) cout<<que.DeQue();           //先进先出
  57. cout<<endl;
  58. if(que.IsEmpty()) cout<<"队空"<<endl;
  59. return 0;
  60. }