📜  通过链表实现栈——C++(1)

📅  最后修改于: 2023-12-03 15:12:26.713000             🧑  作者: Mango

通过链表实现栈——C++

本文介绍如何用链表实现栈(Stack)的数据结构,并提供示例代码。在C++中,我们通常使用类(class)实现数据结构,因此本文中的实现也将是通过类来实现的。

栈的概念

栈(Stack)是一种LIFO(Last In First Out)的数据结构,也就是说,后进入的元素会先从栈中弹出。栈具有以下两个基本操作:

  1. Push:将元素加入栈顶;
  2. Pop:将栈顶元素弹出。
用链表实现栈

链表(Linked List)是一种常见的数据结构,也可用作实现栈的底层实现。链表中每个节点包含数据和指向下一个节点的指针,如果链表为空,则该节点的指针为空。

为了实现栈,我们需要创建一个类来表示节点。在C++中,可以使用struct关键字定义节点结构体。节点结构体应该至少包含以下两个属性:

  1. 数据元素;
  2. 指向下一元素的指针。
struct Node {
  int data;
  Node* next;
};

每个节点可以看作栈中的一个元素,其中data为节点的数据,next为指向下一个元素的指针。接下来,我们需要创建一个类来表示栈。

我们可以将栈实现为一个类,其中定义了节点的数据结构,以及Push和Pop栈操作。我们可以创建一个私有成员变量来跟踪栈顶元素,以及定义接受任何类型数据的Push和Pop方法。

class Stack {
 private:
  Node* top;

 public:
  Stack() {
    top = NULL;
  }

  void Push(int data) {
    Node* newNode = new Node();
    newNode->data = data;
    newNode->next = top;
    top = newNode;
  }

  void Pop() {
    if (top == NULL) {
      cout << "Stack is empty" << endl;
    } else {
      Node* temp = top;
      top = top->next;
      delete temp;
    }
  }
};

Push方法的实现通过创建一个新的节点来实现,将元素加入栈顶,并更新栈顶指针。Pop方法的实现包括检查栈是否为空,并从栈顶弹出所需的元素。值得注意的是,我们在删除节点后需要使用delete运算符来释放分配的内存。

栈的使用示例

现在我们已经定义了栈的实现,我们可以使用以下代码来创建一个对象,并执行一些操作:

int main() {
  Stack s;

  s.Push(1);
  s.Push(2);
  s.Push(3);

  s.Pop();
  s.Pop();
  s.Pop();
  s.Pop();

  return 0;
}

在上面的代码中,我们首先创建了一个Stack类的新实例,然后分别使用Push方法添加三个元素。接下来,我们调用Pop方法四次。由于我们在Pop方法中检查了栈是否为空,因此在尝试弹出元素时,程序将输出“Stack is empty”消息。

结论

本文介绍了如何用链表实现栈的数据结构,并提供了基于C++的示例代码。通过使用链表来实现栈,我们可以轻松地使用C++在程序中处理LIFO数据结构。希望您能够从中受益并开发出更优秀的程序。