21xrx.com
2025-06-19 22:14:51 Thursday
登录
文章检索 我的文章 写文章
C++类实现栈数据结构
2023-07-13 21:14:10 深夜i     21     0
C++ 栈数据结构 实现 数据类型

栈是一种非常常见的数据结构,它可以用于许多应用程序中。在C++中,我们可以使用类来实现一个简单的栈数据结构。本文将介绍如何使用C++类实现栈。

首先,我们需要定义一个类来表示栈。这个类应该有以下基本成员函数:

1. `push`函数:该函数将元素推到栈顶。

2. `pop`函数:该函数将栈顶元素弹出。

3. `top`函数:返回栈顶元素的值。

4. `isEmpty`函数:检查栈是否为空。

对于这个类,我们还需要一个变量来存储栈中的元素。我们可以使用动态数组来实现这个变量。这个数组的大小应该根据实际需要动态调整。

下面是一个简单的C++类定义,用于实现栈数据结构:

class Stack {
public:
  Stack(); // 构造函数
  ~Stack(); // 析构函数
  void push(int); // 入栈
  void pop(); // 出栈
  int top(); // 返回栈顶元素
  bool isEmpty(); // 检查是否为空
private:
  int *arr; // 用于存储栈中的元素
  int size; // 栈的当前大小
  int capacity; // 栈的容量
};

在上面的代码中,我们定义了一个名为`Stack`的类。该类公开了一些函数,如`push`,`pop`和`top`等。这些函数用于向栈中添加和删除元素。`isEmpty`函数用于检查栈是否为空。

我们还定义了三个私有成员变量,`arr`用于存储栈中的元素,`size`用于记录栈内元素的个数,`capacity`用于表示栈的容量。

接下来让我们来看看这些函数的具体实现:

Stack::Stack() {
  arr = new int[INIT_SIZE]; // 初始化动态数组
  size = 0; // 初始元素数量
  capacity = INIT_SIZE; // 初始容量
}
Stack::~Stack() {
  delete[] arr; // 释放动态数组
}
void Stack::push(int value) {
  if (size == capacity) {
    // 扩大数组
    int *temp = new int[capacity * 2];
    for (int i = 0; i < size; ++i) {
      temp[i] = arr[i];
    }
    delete[] arr;
    arr = temp;
    capacity *= 2;
  }
  arr[size++] = value;
}
void Stack::pop() {
  --size;
}
int Stack::top() {
  return arr[size - 1];
}
bool Stack::isEmpty() {
  return size == 0;
}

首先,在构造函数中,我们分配了一个初始大小的动态数组来存储栈中的元素。在析构函数中,我们释放了这个数组。

在`push`函数中,我们首先检查数组是否已经满了,如果是的话,我们将数组扩大两倍。然后,我们将元素添加到数组尾部,并将`size`增加1。

在`pop`函数中,我们只需将`size`减1。

在`top`函数中,我们返回数组的最后一个元素。

最后,在`isEmpty`函数中,我们检查数组元素数量是否为零。

现在,使用这个类时,我们可以像这样创建一个栈对象:

Stack s;

我们可以使用`push`函数来向栈中添加元素,使用`pop`函数来删除栈顶元素,并使用`top`函数来获取栈顶元素的值。

例如:

s.push(1);
s.push(2);
s.push(3);
s.pop();
int top = s.top();
printf("Top of stack: %d\n", top);

这将向栈中添加1,2和3。然后我们从栈中删除了一个元素。最后,我们获取了栈顶元素的值。结果应该是2。

总之,类可以方便地实现栈数据结构,并且可以使用具有不同类型的动态数组来存储元素。由于C++中的STL已经提供了一个`stack`类,所以我们也可以使用这个类来实现同样的功能。

  
  

评论区