在Qt上怎么实现双端栈的可视化?

如题:用一个一维数组作为双端共享栈,设计可视化实现算法进栈,出栈,判断栈满和栈空操作。


#include <iostream>

const int kMaxSize = 100;

class DoubleEndedSharedStack
{
public:
    DoubleEndedSharedStack() : front_(-1), rear_(-1) {}

    bool IsFull() const { return front_ == 0 && rear_ == kMaxSize - 1 || front_ == rear_ + 1; }
    bool IsEmpty() const { return front_ == -1; }

    void PushFront(int x);
    void PushRear(int x);
    int PopFront();
    int PopRear();

private:
    int data_[kMaxSize];
    int front_;
    int rear_;
};

void DoubleEndedSharedStack::PushFront(int x)
{
    if (IsFull())
    {
        std::cout << "栈满,无法进栈" << std::endl;
        return;
    }

    if (front_ == -1) front_ = rear_ = 0;
    else if (front_ == 0) front_ = kMaxSize - 1;
    else --front_;

    data_[front_] = x;
}

void DoubleEndedSharedStack::PushRear(int x)
{
    if (IsFull())
    {
        std::cout << "栈满,无法进栈" << std::endl;
        return;
    }

    if (front_ == -1) front_ = rear_ = 0;
    else if (rear_ == kMaxSize - 1) rear_ = 0;
    else ++rear_;

    data_[rear_] = x;
}

int DoubleEndedSharedStack::PopFront()
{
    if (IsEmpty())
    {
        std::cout << "栈空,无法出栈" << std::endl;
        return 0;
    }

    int x = data_[front_];
    if (front_ == rear_) front_ = rear_ = -1;
    else if (front_ == kMaxSize - 1) front_ = 0;
    else ++front_;

    return x;
}

int DoubleEndedSharedStack::PopRear()
{
    if (IsEmpty())
    {
        std::cout << "栈空,无法出栈" << std::endl;
        return 0;
    }

    int x = data_[rear_];
    if (front_ == rear_) front_ = rear_ = -1;
    else if (rear_ == 0) rear_ = kMaxSize - 1;
    else --rear_;

    return x;
}

int main()
{
    DoubleEndedSharedStack s;

    s.PushFront(1);
    s.PushFront(2);
    s.PushRear(3);
    s.PushRear(4);

    std::cout << s.PopFront() << std::endl;
    std::cout << s.PopRear() << std::endl;

    return 0;
}