当前位置: 首页 > 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

相关文章:

  • 【Java计算机毕业设计】基于Springboot的物业信息管理系统【源代码+数据库+LW文档+开题报告+答辩稿+部署教程+代码讲解】
  • 1-ET框架开发环境与demo运行
  • AI绘画:解锁商业设计新宇宙(6/10)
  • Immutable设计 SimpleDateFormat DateTimeFormatter
  • LabVIEW涡轮诊断系统
  • 车载软件架构 --- 基于AUTOSAR软件架构的ECU开发流程小白篇
  • 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实现燕双鹰小游戏