【C++实现队列】

该文详细介绍了队列的基本概念及其特点,使用双链表实现队列的结构,包括入队、出队和打印队列元素的操作。队列是一种先进先出(FIFO)的数据结构,文中提供的C++代码示例展示了如何初始化、添加元素、删除元素以及显示队列内容。
摘要由CSDN通过智能技术生成

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

一、队列

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

结尾

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

葛狂的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值