21xrx.com
2024-12-27 05:54:16 Friday
登录
文章检索 我的文章 写文章
C++类模板实现栈
2023-07-09 10:18:44 深夜i     --     --
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作为模板参数传入即可。这样,我们就可以在不同场景下使用同一个栈类,提高代码的复用性和可维护性。

  
  

评论区

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