用一个单链表L实现一个栈(算法导论第十章10.2-2题)
template<typename T>
class HalfNode
{
public:T key;HalfNode* next;
public:HalfNode(){next = nullptr;};HalfNode(const T key):key(key){next = nullptr;};
};
template<typename T>
class Single_L
{
public:HalfNode<T> *head;
public:Single_L(){head = nullptr;}
};
template<typename T>
void push(Single_L<T>& l,T key)
{HalfNode<T>* node = new HalfNode<T>(key);if(l.head != nullptr){node->next = l.head;}l.head = node;
}
template<typename T>
T pop(Single_L<T> & l)
{if(l.head == nullptr){throw "underflow";}HalfNode<T> * node = l.head;l.head = l.head->next;T t = node->key;delete node;return t;
}
测试代码
int size = 5;Single_L<int> singleL;for (int i = 0; i < size; ++i) {push(singleL,i);}for (int i = 0; i < size; ++i) {cout<<pop(singleL)<<" ";}