概要:本期主要学习对列的结构、对列的操作实现。
一、队列
队列是一种常用的数据结构,它具有鲜明的特点:
1.只能在一端进行元素入队,另一端进行元素出队。
2.先入队的元素先出队列。
具体结构如下图所示:
二、队列的操作实现
0.栈的结构和初始化
class DoubleLinkedListQueue
{
private:
class Element
{
public:
QString data;
Element *next;//指向下一个元素
Element *pre;//指向上一个元素
};
int length;
Element *head;//队首元素
Element *tail;//队尾元素
public:
DoubleLinkedListQueue();
};
DoubleLinkedListQueue::DoubleLinkedListQueue()
{
//初始化空队列,
tail = new Element;
tail->pre = nullptr;
tail->next = nullptr;
tail->data = "";
head = new Element;
head = tail;//队首等于队尾
length = 0;
}
1.入队
void DoubleLinkedListQueue::push(QString data)
{
Element *_elem = new Element;
_elem->data = data;
if(head == tail)//空队列
{
_elem->next = nullptr;
head->next = _elem;
_elem->pre = head;
tail = _elem;//队尾元素指向入队元素
}
else
{
_elem->next = head->next;
head->next->pre = _elem;
_elem->pre = head;
head->next = _elem;
}
length++;
qDebug()<<data<<QStringLiteral("入队成功!")<<endl;
}
2.出队
void DoubleLinkedListQueue::pop()
{
if(length <=0)
{
qDebug()<<QStringLiteral("队列为空,出队失败!")<<endl;
return;
}
Element *_elem = tail;
tail = _elem->pre; //队尾元素指向出队元素的前一个元素
tail->next = nullptr;
delete _elem;
_elem = NULL;
length--;
qDebug()<<QStringLiteral("出队成功!")<<endl;
}
3.打印队列中元素
void DoubleLinkedListQueue::DisplayDoubleLinkedListQueue()
{
Element *_elem = head->next;
int i = 0;
qDebug()<<QStringLiteral("队列大小为:")<<length<<endl<<QStringLiteral("队列中元素如下:");
while(i < length)
{
qDebug()<<_elem->data<<" "<<endl;
_elem = _elem->next;
i++;
if(_elem == NULL)
{
return;
}
}
}
结尾
本期对队列的学习就到这,下期我们学习双端队列:)