ep7_9_1.h
上传用户:wxcui2006
上传日期:2022-07-12
资源大小:1274k
文件大小:2k
源码类别:

书籍源码

开发平台:

Visual C++

  1. #include<iostream>
  2. #include<cassert>
  3. using namespace std;
  4. template<typename T>class Queue;
  5. template<typename T>class Node{
  6. T info;
  7. Node<T> *link;
  8. public:
  9. Node(){link=NULL;}
  10. Node(T data,Node *l=NULL);
  11. T Getinfo(){return info;};               //获得结点数据
  12.     Node<T>* Getlink(){return link;};        //获得结点的指针
  13.     void Setinfo(T data){info=data};           //设置结点数据
  14.     void Setlink(Node<T> * pNext){link=pNext;} //设置结点的指针
  15. };
  16. template<typename T> Node<T>::Node(T data,Node *l){
  17. info=data;
  18. link=l;
  19. };
  20. template<typename T>class list{
  21. Node<T> *front,*rear;
  22. public:
  23. list(){rear=front=NULL;}  //构造一个空链
  24. ~list();
  25. bool IsEmpty(){ return front==NULL;}  //链空否?
  26. void EnRear(const T &);      //进链
  27. T DeFront();  //出链
  28. T GetFront();    //查看链头数据
  29. void MakeEmpty();     //置空链,与析构逻辑上不同,物理上一样
  30. void EnFront(const T &);                     //从链头入链
  31. };
  32. template<typename T>void list<T>::MakeEmpty(){
  33. Node<T> *temp;
  34. while(front!=NULL){
  35. temp=front;front=front->Getlink();delete temp;
  36. }
  37. }
  38. template<typename T>list<T>::~list(){MakeEmpty();}
  39. template<typename T>void list<T>::EnRear(const T &data){
  40. if(front==NULL) front=rear=new Node<T>(data,NULL);
  41. else {
  42. rear->Setlink(new Node<T>(data,NULL));
  43. rear=rear->Getlink();
  44. }
  45. }
  46. template<typename T>void list<T>::EnFront(const T &data){  //从链头入链
  47. Node<T> *p=new Node<T>(data,NULL);
  48. if(front==NULL) front=rear=p;
  49. else{
  50. p->Setlink(front);
  51. front=p;
  52. }
  53. }
  54. template<typename T>T list<T>::DeFront(){
  55. assert(!IsEmpty());
  56. Node<T> *temp=front;
  57. T data=temp->Getinfo();
  58. front=front->Getlink();
  59. delete temp;
  60. return data;
  61. }
  62. template<typename T>T list<T>::GetFront(){
  63. assert(!IsEmpty());
  64. return front->Getinfo();
  65. }