21xrx.com
2024-11-22 05:37:55 Friday
登录
文章检索 我的文章 写文章
C++模板实现栈
2023-07-09 03:27:06 深夜i     --     --
C++ 模板 实现

C++是一门类型安全的编程语言,它可以使用模板来定义通用的数据类型和算法。在C++中,模板可以用于实现栈这种数据结构。

栈是一种后进先出(LIFO)的数据结构,它在计算机程序中非常常见。栈数据结构的基本操作包括压入元素、弹出元素、获取栈顶元素和判断栈是否为空。使用模板可以使栈具有更好的通用性和灵活性,可以适应各种不同的数据类型。

使用C++模板实现一个栈非常简单。首先,我们需要定义一个节点类来表示栈的节点。该节点类应该包含该节点所保存的值和指向下一个节点的指针。然后,我们可以定义一个栈类,该类包含一个指向栈顶节点的指针和若干个成员函数来实现栈的基本操作。

以下是一个简单的C++模板实现栈的示例代码:


#include <iostream>

template <class T>

class Stack {

private:

  struct Node {

    T data;

    Node* next;

    Node(const T& data) : data(data), next(nullptr) {}

  };

  Node* top;

public:

  Stack() : top(nullptr) {}

  ~Stack() {

    while (!isEmpty()) {

      pop();

    }

  }

  void push(const T& data) {

    Node* node = new Node(data);

    node->next = top;

    top = node;

  }

  void pop() {

    if (!isEmpty()) {

      Node* node = top;

      top = top->next;

      delete node;

    }

  }

  T peek() const {

    if (!isEmpty())

      return top->data;

    

  }

  bool isEmpty() const

    return top == nullptr;

  

};

int main() {

  Stack<int> intStack;

  intStack.push(1);

  intStack.push(2);

  intStack.push(3);

  while (!intStack.isEmpty()) {

    std::cout << intStack.peek() << std::endl;

    intStack.pop();

  }

  Stack<std::string> stringStack;

  stringStack.push("hello");

  stringStack.push("world");

  while (!stringStack.isEmpty()) {

    std::cout << stringStack.peek() << std::endl;

    stringStack.pop();

  }

  return 0;

}

在上面的代码中,我们定义了一个`Stack`模板类,它可以适用于任何数据类型`T`。该模板类包含了一个结构体`Node`,该结构体表示栈的一个节点。`Node`结构体包含了该节点所保存的值(`data`)和指向下一个节点的指针(`next`)。

`Stack`模板类中还定义了一个指向栈顶节点的指针`top`,以及若干个成员函数。`push()`函数用于在栈顶插入一个新节点,`pop()`函数用于弹出栈顶节点,`peek()`函数用于获取栈顶节点的值,`isEmpty()`函数用于判断该栈是否为空。

在主函数中,我们创建了两个栈:一个存储`int`类型的栈和另一个存储`std::string`类型的栈。我们在每个栈中添加了几个元素,然后依次弹出这些元素并输出。

总之,使用C++模板实现栈是一种非常简单和灵活的方法,可以使用该方法实现各种不同数据类型的栈。模板的通用性和灵活性也使代码更易于维护和扩展。因此,C++模板是编写高效且通用的代码的有用工具。

  
  

评论区

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