当前位置: 首页 > article >正文

栈-数组描述(C++)

定义

使用数组描述栈时,通常包含以下几个基本要素:

  1. 栈顶指针(Top Pointer):用于指示栈顶元素的位置。栈顶指针的初始值通常设置为-1,表示栈为空。
  2. 栈底(Bottom):数组的起始位置,通常固定。
  3. 栈容量(Capacity):栈可以容纳的最大元素个数,由数组的大小决定。

栈的基本操作包括:

  • 压栈(Push):将新元素添加到栈顶。
  • 弹栈(Pop):移除栈顶元素。
  • 查看栈顶元素:获取栈顶元素但不移除它。
  • 检查栈是否为空:判断栈顶指针是否为-1。

抽象类stack

template<typename T>
class stack
{
public:
    virtual   ~stack(){}
    virtual bool empty() const = 0;
    virtual int size() const = 0;
    virtual T& top() const = 0;
    virtual void push(const T& theElement) const = 0;
    virtual void pop() = 0;
};

派生类arrayStack

template <typename T>
class arrayStack : public stack<T>
{
public:
    arrayStack(int initialCapacity = 10);
    ~arrayStack();
    bool empty() const;
    int size() const;
    T &top() const;
    void push(const T &theElement);
    void pop();

private:
    int stackTop;
    int arrayLength;
    T* stack;
};
template<typename T>
arrayStack<T>::arrayStack(int initialCapacity)
{
    assert(initialCapacity > 0);
    arrayLength = initialCapacity;
    stack = new T[arrayLength];
    stackTop = -1;
}

template<typename T>
arrayStack<T>::~arrayStack()
{
    delete [] stack;
}

template<typename T>
bool arrayStack<T>::empty() const
{
    return stackTop == -1;
}

template<typename T>
int arrayStack<T>::size() const
{
    return stackTop + 1;
}

template<typename T>
T &arrayStack<T>::top() const
{
    if(stackTop == -1)
    {
        assert(stackTop > -1);
    }

    return stack[stackTop];

}

template<typename T>
void arrayStack<T>::push(const T &theElement)
{
    if(stackTop == arrayLength -1)
    {
        changeLength1D(stack,arrayLength,arrayLength*2);
        arrayLength *= 2;
    }

    stack[++stackTop] = theElement;
}

template<typename T>
void arrayStack<T>::pop()
{
    if(stackTop == -1)
    {
        assert(stackTop > -1);
    }

    stack[stackTop--].~T();
}


http://www.kler.cn/a/418327.html

相关文章:

  • 从0开始学PHP面向对象内容之常用设计模式(享元)
  • 大模型时代的人工智能基础与实践——基于OmniForce的应用开发教程
  • springboot信息化在线教学平台的设计与实现(代码+数据库+LW)
  • React 自定义钩子:useOnlineStatus
  • 在CentOS系统中安装工具包的时候报错的解决方法
  • RAT:融合RAG和CoT的高效多步推理任务策略
  • mysql查询语句执行全流程
  • 10x 性能提升,ProtonBase 为教育行业提供统一的数据库和数仓体验
  • 【C#设计模式(16)——解释器模式(Interpreter Pattern)】
  • 搭建业务的性能优化指南
  • [C/C++]排序算法1、冒泡排序
  • 汽车座舱系统名词
  • 【开源免费】基于Vue和SpringBoot的校园资料分享平台(附论文)
  • 七牛智能CDN视频优化方案,展现企业长期价值
  • android shader gl_Position是几个分量
  • 【竞技宝】CS2-上海major:MongoLZ成为亚洲之光
  • C# 中的事件:对象间通信的利器
  • macos下brew安装redis
  • 每日十题八股-2024年11月30日
  • 依托 SpringBoot 的新冠密接者跟踪系统:技术创新驱动疫情防控效能提升
  • wordpress仿社交软件SOUL 动态标签星球- 为你的博客注入灵魂
  • <项目代码>YOLOv8 红绿灯识别<目标检测>
  • Git push
  • 行列式与线性方程组解的关系
  • 解决“win7系统无法定位程序输入点 SetDefaultDllDirectories“问题
  • 我不是挂王-用python实现燕双鹰小游戏