21xrx.com
2024-12-22 17:26:48 Sunday
登录
文章检索 我的文章 写文章
C++类实现栈数据结构
2023-07-13 21:14:10 深夜i     --     --
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`类,所以我们也可以使用这个类来实现同样的功能。

  
  

评论区

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