定义
队列是一种先进先出的线性结构。队列从对头取出数据,从对尾插入数据。
链队列示例
//数据结点
template <typename T> struct linkQueueNode
{
T data;
linkQueueNode * next{nullptr};//前一个结点
};
template <typename T> class linkQueue
{
public:
linkQueue()
{}
~linkQueue()
{
clear();
}
void enqueue(const T & data);
T dequeue();
void clear();
int length();
private:
linkQueueNode<T> * headNode{nullptr};
linkQueueNode<T> * tailNode{nullptr};
};
//入队
template <typename T> void linkQueue<T>::enqueue(const T & data)
{
linkQueueNode<T> * p = static_cast<linkQueueNode<T>*>(malloc(sizeof (linkQueueNode<T>)));
p->data = data;
p->next = nullptr;
if(!headNode)
{
headNode = p;
}
if(tailNode)
{
tailNode->next = p;
}
tailNode = p;
}
//出队
template <typename T> T linkQueue<T>::dequeue()
{
T data;
if(headNode)
{
data = headNode->data;
linkQueueNode<T> * p = headNode;
headNode = p->next;
free(p);
}
return data;
}
//清空队列
template <typename T> void linkQueue<T>::clear()
{
while (headNode != tailNode)
{
dequeue();
}
if(tailNode)
{
free(tailNode);
}
tailNode = nullptr;
headNode = nullptr;
}
//获取队列元素个数
template <typename T> int linkQueue<T>::length()
{
int count{0};
linkQueueNode<T> * p = headNode;
while (p)
{
++count;
p = p->next;
}
return count;
}
测试:
linkQueue<int> queue;
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
queue.enqueue(4);
queue.enqueue(5);
qDebug()<<"队列元素个数:"<<queue.length();
qDebug()<<"出队:"<<queue.dequeue();
qDebug()<<"出队:"<<queue.dequeue();
qDebug()<<"队列元素个数:"<<queue.length();
queue.clear();
qDebug()<<"队列元素个数:"<<queue.length();