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