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

书籍源码

开发平台:

Visual C++

  1. //【例7.9_h】链栈的类模板,本例为头文件"Ex7_9.h"。采用无头结点链表。
  2. #include<cassert>
  3. using namespace std;
  4. template<typename T>class Stack;
  5. template<typename T>class Node{                  //链栈结点类模板
  6. T info;
  7. Node<T> *link;
  8. public:
  9. Node(T data=0,Node<T> *next=NULL){
  10. info=data;
  11. link=next;
  12. }
  13. friend class Stack<T>;
  14. };
  15. template<typename T>class Stack{                  //链栈类模板,无头结点链表
  16. Node<T> *top;                              //栈顶指针
  17. public:
  18. Stack(){top=NULL;}
  19. ~Stack();
  20. void Push(const T &data);                      //压栈
  21. T Pop();                                    //弹出
  22. T GetTop();                                 //取栈顶元素
  23. void MakeEmpty();                           //清空栈
  24. bool IsEmpty(){return top==NULL;}
  25. };
  26. template<typename T> Stack<T>::~Stack(){MakeEmpty();}
  27. template<typename T>void Stack<T>::MakeEmpty(){
  28. Node<T> *temp;
  29. while(top!=NULL){temp=top;top=top->link;delete temp;}
  30. }
  31. template<typename T> void Stack<T>::Push(const T &data){
  32. top=new Node<T>(data,top);
  33. }
  34. template<typename T> T Stack<T>::Pop(){
  35. assert(!IsEmpty());
  36. Node<T> *temp=top;
  37. T data=temp->info;
  38. top=top->link;                             //丢弃栈顶结点
  39. delete temp;                               //释放栈顶结点
  40. return data;                                //返回栈顶数据
  41. }
  42. template<typename T> T Stack<T>::GetTop(){
  43. assert(!IsEmpty());
  44. return top->info;
  45. }