21xrx.com
2024-11-05 18:39:25 Tuesday
登录
文章检索 我的文章 写文章
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++顺序栈类是一种非常实用的数据结构,其简单易用的实现方式使得我们可以快速地对数据进行推入、弹出、访问等操作,帮助我们解决各种实际问题。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复