用一个单链表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)<<" ";
}