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 }
LinkStack class,布布扣,bubuko.com
原文:http://www.cnblogs.com/aoun/p/3673099.html