21xrx.com
2025-03-27 03:04:10 Thursday
文章检索 我的文章 写文章
C++类模板实现栈
2023-07-09 10:18:44 深夜i     19     0
C++ 类模板 实现

栈(stack)是一种基本的数据结构,它具有后进先出(LIFO)的特点。在C++中,我们可以使用类模板(class template)来实现一个通用的栈类,下面我们来看一下如何实现。

首先,我们需要定义一个栈类模板。对于栈来说,最基本的操作有两个:push和pop。push用于将一个元素压入栈中,pop用于将栈顶元素弹出。此外,我们还需要定义一个isEmpty函数用于判断栈是否为空。

template <typename T>
class Stack {
private:
 T* mData;
 int mTop;
 int mCapacity;
public:
 Stack(int capacity) : mCapacity(capacity), mTop(0) {
  mData = new T[mCapacity];
 }
 ~Stack() {
  delete[] mData;
 }
 void push(const T& data) {
  if (mTop < mCapacity) {
   mData[mTop++] = data;
  }
 }
 void pop() {
  if (mTop > 0) {
   mTop--;
  }
 }
 bool isEmpty() const {
  return mTop == 0;
 }
};

上面的代码中,我们使用指针mData来存储栈的元素,同时用变量mTop表示栈顶元素的位置。在构造函数中,我们通过new运算符动态申请了mCapacity个T类型的空间,并将指针赋值给mData。在析构函数中,我们使用delete[]运算符释放了mData指向的内存。push函数用于将一个元素压入栈中,它首先判断栈是否已满,如果没有,就将元素添加到mData数组中,并让mTop加一。pop函数用于将栈顶元素弹出,它首先判断栈是否为空,如果不为空,就让mTop减一。isEmpty函数用于判断栈是否为空,它只需判断mTop是否为零即可。

下面是一个使用上述栈类模板的例子:

#include <iostream>
#include "Stack.h"
int main() {
 Stack<int> stack(5);
 stack.push(1);
 stack.push(2);
 stack.push(3);
 stack.pop();
 while (!stack.isEmpty()) {
  std::cout << stack.top() << std::endl;
  stack.pop();
 }
 return 0;
}

上述代码中,我们创建了一个容量为5的整型栈对象,将元素1、2、3压入栈中,然后将栈顶元素弹出,最后依次输出栈中的元素。

通过使用类模板,我们可以轻松地实现通用的栈类,只需将存储元素的类型T作为模板参数传入即可。这样,我们就可以在不同场景下使用同一个栈类,提高代码的复用性和可维护性。

  
  

评论区

请求出错了