LinkStack class

  1 #include <cstddef>
  2 
  3 struct Node {
  4     Node * next;
  5 
  6     Node() { next = NULL;}
  7     Node(const Node & node) {
  8         next = node.next;
  9     }
 10 };
 11 
 12 enum Error_code {
 13     succeed,
 14     overflow,
 15     underflow
 16 };
 17 
 18 
 19 class LinkStack { // This class have no capacity limit
 20 public:
 21     LinkStack();
 22     LinkStack(const LinkStack & rhs);
 23     ~LinkStack();
 24 
 25     LinkStack & operator=(const LinkStack & rhs);
 26 
 27     Error_code push(const Node & item);
 28     Error_code pop();
 29     Error_code top(Node * item) const;
 30     bool empty() const;
 31 
 32 protected:
 33     Node * top_node;
 34 };
 35 
 36 LinkStack::LinkStack() {
 37 
 38 }
 39 
 40 LinkStack::LinkStack(const LinkStack & rhs) {
 41     Node * new_top, * new_copy, * old_node=rhs.top_node;
 42     if (old_node == NULL)
 43         new_top = NULL;
 44     else {
 45         new_top = new_copy = new Node(*old_node);
 46         while(old_node->next != NULL) {
 47             old_node = old_node->next;
 48             new_copy->next= new Node(*old_node);
 49             new_copy = new_copy->next;
 50         }
 51     }
 52 }
 53 
 54 LinkStack::~LinkStack() {
 55     while(!empty())
 56         pop();
 57 }
 58 
 59 Error_code LinkStack::push(const Node & item) {
 60     Node * new_top = new Node(item);
 61     if (new_top == NULL)
 62         return overflow;
 63     top_node = new_top;
 64     return succeed;
 65 }
 66 
 67 Error_code LinkStack::pop() {
 68     Node * old_top = top_node;
 69     if (top_node == NULL)
 70         return underflow;
 71     top_node = top_node->next;
 72     delete old_top;
 73     return succeed;
 74 }
 75 
 76 bool LinkStack::empty() const {
 77     if (top_node == NULL)
 78         return true;
 79     return false;
 80 }
 81 
 82 Error_code LinkStack::top(Node * item) const{
 83     if (top_node == NULL)
 84         return underflow;
 85     item = top_node;
 86     return succeed;
 87 }
 88 
 89 LinkStack & LinkStack::operator=(const LinkStack & rhs) {
 90     Node * new_top, * new_copy, * old_node=rhs.top_node;
 91     if (old_node == NULL)
 92         new_top = NULL;
 93     else {
 94         new_top = new_copy = new Node(*old_node);
 95         while (old_node->next != NULL) {
 96             old_node = old_node->next;
 97             new_copy->next = new Node(*old_node);
 98             new_copy = new_copy->next;
 99         }
100     }
101 
102     while(!empty())
103         pop();
104     top_node = new_top;
105 
106     return *this;
107 }

 

转载于:https://www.cnblogs.com/aoun/p/3673099.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值