【C++实现队列】

概要:本期主要学习对列的结构、对列的操作实现。

一、队列

队列是一种常用的数据结构,它具有鲜明的特点:
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;
        }
    }
}

结尾

本期对队列的学习就到这,下期我们学习双端队列:)

猜你喜欢

转载自blog.csdn.net/wddkxg/article/details/129319824
今日推荐