用一个单链表L实现一个队列(算法导论第十章10.2-3)
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;HalfNode<T> *tail;
public:Single_L(){tail = head = nullptr;}
};
template<typename T>
void enqueue(Single_L<T> &l,T key)
{HalfNode<T>* node = new HalfNode<T>(key);if(l.head == nullptr){l.head = l.tail = node;}else{l.tail->next = node;l.tail = node;}
}
template<typename T>
T dequeue(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) {enqueue(singleL,i);}for (int i = 0; i < size; ++i) {cout<<dequeue(singleL)<<" ";}