Stack.cpp
上传用户:stella1212
上传日期:2022-08-06
资源大小:567k
文件大小:2k
开发平台:

Visual C++

  1. #include "Stack.h"
  2. #include"Struct.h"
  3. Stack::Stack(void)
  4. {
  5. top_node = NULL;
  6. }
  7. //用于检查栈是否为空
  8. bool Stack::empty() const
  9. {
  10. if(top_node == NULL)
  11. return true;
  12. return false;
  13. }
  14. //将元素item 压入到栈顶,如果栈已满,则返回上溢标志overflow
  15. Error_code Stack::push(const Stack_entry &item)
  16. {
  17. Node *new_top = new Node(item,top_node);
  18. if(new_top ==NULL)
  19. return overflow;
  20. top_node = new_top;
  21. return success;
  22. }
  23. //将栈顶的元素弹出,如果栈为空,则返回underflow
  24. Error_code Stack::pop()
  25. {
  26. Node *old_node = top_node;
  27. if(top_node == NULL)
  28. return underflow;
  29. top_node = top_node->next;
  30. delete old_node;
  31. return success;
  32. }
  33. //得到栈顶的元素的方法,如果栈为空,那么返回下溢标志;
  34. Error_code Stack::top(Stack_entry &item) const
  35. {
  36. if(top_node ==NULL)
  37. return underflow;
  38. item = top_node->entry;
  39. return success;
  40. }
  41. //拷贝构造函数
  42. Stack::Stack(const Stack &original)
  43. {
  44. Node *new_copy ,*original_node;
  45. original_node = original.top_node;
  46. if(original_node == NULL)
  47. top_node = NULL;
  48. else
  49. {
  50. new_copy = top_node = new Node(original_node->entry);
  51. while(original_node->next != NULL)
  52. {
  53. original_node = original_node->next;
  54. new_copy->next = new Node(original_node ->entry);
  55. new_copy = new_copy->next;
  56. }
  57. }
  58. }
  59. //赋值操作符重载函数,用来避免出现赋值导致的内存消耗
  60. void Stack::operator =(const Stack &original)
  61. {
  62. Node* new_copy,*new_top,*original_node;
  63. original_node = original.top_node;
  64. if(original_node == NULL)
  65. new_top = NULL;
  66. else
  67. {
  68. new_top = new_copy = new Node(original_node ->entry);
  69. while(original_node!=NULL)
  70. {
  71. original_node = original_node->next;
  72. new_copy ->next = new Node(original_node->entry);
  73. new_copy = new_copy->next;
  74. }
  75. }
  76. while(!empty())
  77. pop();
  78. top_node = new_top;
  79. }
  80. //析构函数,清空栈中分配的内存
  81. Stack::~Stack(void)
  82. {
  83. while(!empty())
  84. pop();
  85. }