21xrx.com
2025-03-27 00:17:19 Thursday
文章检索 我的文章 写文章
C++顺序栈类的实现代码
2023-07-04 23:14:54 深夜i     --     --
C++ 顺序栈 实现 代码

C++顺序栈类是一种实现栈数据结构的方法,其底层使用数组来存储栈的元素,实现了先进后出(LIFO)的特性。下面是一个常用的C++顺序栈类的实现代码:

template<class T>
class SeqStack
{
private:
  T* data;      //存放元素的数组
  int top;      //栈顶元素的下标
  int maxSize;    //栈的最大容量
public:
  SeqStack(int size = 100) : maxSize(size)
  {
    data = new T[maxSize];
    top = -1;
  }
  ~SeqStack()
  {
    delete[] data;
  }
  //将栈清空
  void clear()
  {
    top = -1;
  }
  //判断栈是否为空
  bool isEmpty() const
  {
    return top == -1;
  }
  //判断栈是否已满
  bool isFull() const
  {
    return top == maxSize - 1;
  }
  //返回栈的元素个数
  int size() const
  {
    return top + 1;
  }
  //返回栈顶元素
  T peek() const
  {
    if (isEmpty())
      throw "栈为空";
    return data[top];
  }
  //将元素压入栈中
  void push(const T& x)
  {
    if (isFull())
      throw "栈已满";
    data[++top] = x;
  }
  //弹出栈顶元素
  T pop()
  {
    if (isEmpty())
      throw "栈为空";
    return data[top--];
  }
};

上述代码中,我们定义了一个`SeqStack`类,并使用泛型`T`来定义栈中元素的类型。首先,我们在构造函数中初始化了栈的最大容量`maxSize`、栈顶元素下标`top`和存放元素的数组`data`。通过实现栈中需要用到的一些公共方法,比如`push()`、`pop()`、`peek()`、`size()`等,我们可以轻松地对栈进行操作。

在使用时,我们可以通过实例化`SeqStack`类来创建一个栈对象,如下所示:

SeqStack<int> stack(10);  //创建一个最大容量为10的int类型栈对象

除了以上常用的栈操作方法之外,我们还需要注意一些栈的特性。比如,在进行`push()`操作时,我们需要先判断栈是否已满;在进行`pop()`操作时,我们需要先判断栈是否为空。如果不进行判断,可能会导致程序崩溃。因此,要写出健壮的代码,需要对所编写程序的各种情况进行全面的考虑和判断。

总之,C++顺序栈类是一种非常实用的数据结构,其简单易用的实现方式使得我们可以快速地对数据进行推入、弹出、访问等操作,帮助我们解决各种实际问题。

  
  

评论区