当前位置:   article > 正文

C++ 栈_清空栈

清空栈

理论原理:

 

 顺序栈代码实现:

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. #define MAX 10
  5. template<typename T>
  6. struct Stack
  7. {
  8. T data[MAX];
  9. int size;
  10. Stack(T *data);
  11. //入栈
  12. void pushStack(T t);
  13. //出栈
  14. void popStack();
  15. //访问栈顶元素
  16. T* topStack();
  17. //获取栈大小
  18. int sizeStack();
  19. //清空栈
  20. void clearStack();
  21. };
  22. struct Person
  23. {
  24. string name;
  25. int age;
  26. };
  27. template<typename T>
  28. Stack<T>::Stack(T *data)
  29. {
  30. size=0;
  31. }
  32. template<typename T>
  33. void Stack<T>::pushStack(T t)
  34. {
  35. if(size == MAX)
  36. {
  37. return;
  38. }
  39. data[size]=t;
  40. size++;
  41. }
  42. template<typename T>
  43. void Stack<T>::popStack()
  44. {
  45. if(size == 0)
  46. {
  47. return;
  48. }
  49. size--;
  50. }
  51. template<typename T>
  52. T* Stack<T>::topStack()
  53. {
  54. if(size == 0)
  55. {
  56. return NULL;
  57. }
  58. return &data[size-1];
  59. }
  60. template<typename T>
  61. int Stack<T>::sizeStack()
  62. {
  63. return size;
  64. }
  65. template<typename T>
  66. void Stack<T>::clearStack()
  67. {
  68. size=0;
  69. }
  70. int main()
  71. {
  72. //初始化数据
  73. Person p[5]={{"A",10},{"B",20},{"C",30},{"D",40},{"E",50}};
  74. //初始化栈
  75. Stack<Person> stack(NULL);
  76. //入栈
  77. for(int i=0;i<5;i++)
  78. {
  79. stack.pushStack(p[i]);
  80. }
  81. //获取栈大小
  82. cout<<stack.sizeStack()<<endl;
  83. //获取栈顶元素
  84. Person *person=stack.topStack();
  85. cout<<person->name<<" "<<person->age<<endl;
  86. //出栈
  87. stack.popStack();
  88. //获取栈顶元素
  89. person=stack.topStack();
  90. cout<<person->name<<" "<<person->age<<endl;
  91. //清空栈
  92. stack.clearStack();
  93. //获取栈大小
  94. cout<<stack.sizeStack()<<endl;
  95. //获取栈顶元素
  96. person=stack.topStack();
  97. cout<<person->name<<" "<<person->age<<endl;
  98. return 0;
  99. }

 顺序栈运行结果:

链式栈代码实现 :

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. struct Link_Node
  5. {
  6. Link_Node *next;
  7. };
  8. struct Link_Stack
  9. {
  10. Link_Node *head;
  11. int size;
  12. Link_Stack();
  13. ~Link_Stack();
  14. //入栈
  15. void pushStack(Link_Node *node);
  16. //出栈
  17. void popStack();
  18. //访问栈顶元素
  19. Link_Node* topStack();
  20. //获取栈的大小
  21. int sizeStack();
  22. //清空栈
  23. void clearStack();
  24. };
  25. struct Person
  26. {
  27. Link_Node node;
  28. string name;
  29. int age;
  30. Person(string name,int age);
  31. };
  32. Link_Stack::Link_Stack()
  33. {
  34. head=new Link_Node;
  35. head->next=NULL;
  36. size=0;
  37. }
  38. Link_Stack::~Link_Stack()
  39. {
  40. delete head;
  41. }
  42. void Link_Stack::pushStack(Link_Node *node)
  43. {
  44. node->next=head->next;
  45. head->next=node;
  46. size++;
  47. }
  48. void Link_Stack::popStack()
  49. {
  50. if(size == 0)
  51. {
  52. return;
  53. }
  54. head->next=head->next->next;
  55. size--;
  56. }
  57. Link_Node *Link_Stack::topStack()
  58. {
  59. if(size == 0)
  60. {
  61. return NULL;
  62. }
  63. return head->next;
  64. }
  65. int Link_Stack::sizeStack()
  66. {
  67. return size;
  68. }
  69. void Link_Stack::clearStack()
  70. {
  71. head->next=NULL;
  72. size=0;
  73. }
  74. Person::Person(string name, int age)
  75. {
  76. this->name=name;
  77. this->age=age;
  78. }
  79. int main()
  80. {
  81. //初始化数据
  82. Person p1("A",10);
  83. Person p2("B",20);
  84. Person p3("C",30);
  85. Person p4("D",40);
  86. Person p5("E",50);
  87. //初始化栈
  88. Link_Stack stack;
  89. //入栈
  90. stack.pushStack((Link_Node*)&p1);
  91. stack.pushStack((Link_Node*)&p2);
  92. stack.pushStack((Link_Node*)&p3);
  93. stack.pushStack((Link_Node*)&p4);
  94. stack.pushStack((Link_Node*)&p5);
  95. //访问栈顶元素
  96. Person *person=(Person*)stack.topStack();
  97. cout<<person->name<<" "<<person->age<<endl;
  98. //出栈
  99. stack.popStack();
  100. person=(Person*)stack.topStack();
  101. cout<<person->name<<" "<<person->age<<endl;
  102. cout<<stack.sizeStack()<<endl;
  103. stack.clearStack();
  104. cout<<stack.sizeStack()<<endl;
  105. return 0;
  106. }

链式栈运行结果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/404988
推荐阅读
相关标签
  

闽ICP备14008679号