【C++实现栈】

概要:本期学习栈的结构以及操作实现。

一、栈的结构

栈是一种常用的数据结构,具有显著的特点:
1.只允许在一侧进行入栈、出栈操作。
2.先入栈的元素后出栈。

具体结构如下图所示:
在这里插入图片描述

二、栈的操作实现

下面是利用了单链表来实现的栈的入栈出栈操作。

0.栈的结构和初始化

class DoubleLinkedListStack
{
    
    
private:
    class Element
    {
    
    
    public:
        QString data;
        Element *next;//指向上一个元素
    };

    int length;

    Element *top;//栈顶

public:
    DoubleLinkedListStack();
}:
DoubleLinkedListStack::DoubleLinkedListStack()
{
    
    
    //初始化空栈,栈顶元素指向空
    top = new Element;
    top->data = "";
    top->next = nullptr;

    length = 0;
}

1.入栈

void DoubleLinkedListStack::Push(QString data)
{
    
    
    Element *_elem = new Element;
    _elem->data = data;
    if(top->next == nullptr)
    {
    
    
        top->next = _elem;
        _elem->next = nullptr;
    }
    else
    {
    
    
        _elem->next = top->next;
        top->next = _elem;
    }
    length++;
    qDebug()<<data<<QStringLiteral("入栈成功!")<<endl;
    qDebug()<<QStringLiteral("当前栈大小为:")<<length<<endl;

}

2.出栈

void DoubleLinkedListStack::pop()
{
    
    
    if(length <=0)
    {
    
    
        qDebug()<<QStringLiteral("栈为空,出栈失败!")<<endl;
        return;
    }
    Element *_elem = top;
    top = _elem->next;
    delete _elem;
    _elem = NULL;
    length--;
    qDebug()<<QStringLiteral("出栈成功!")<<endl;

}

3.打印栈中元素

void DoubleLinkedListStack::DisplayStack()
{
    
    
    Element *_elem = top->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/129318425
今日推荐