21xrx.com
2024-12-27 22:26:45 Friday
登录
文章检索 我的文章 写文章
C++自定义栈
2023-07-09 03:57:34 深夜i     --     --
C++ 自定义

C++是一种流行的编程语言,它支持广泛的数据结构和算法。其中,栈是一种非常重要的数据结构,它用于存储和管理数据。C++中已经提供了标准的栈类,但是有时候我们需要自己实现一个栈类来满足特定的需求。下面介绍如何使用C++语言来自定义一个栈类。

首先,我们需要定义一个栈类。在C++中,我们可以使用模板来实现一个通用的栈类。模板可以在编译时根据不同的数据类型生成不同的代码,从而实现通用性。下面是一个基本的栈类定义:


template<class T>

class Stack {

  private:

    T* data; // 存储数据的数组

    int top; // 栈顶指针

    int size; // 栈的大小

  public:

    Stack(int s = 100); // 构造函数

    ~Stack(); // 析构函数

    bool empty(); // 判空

    bool full();  // 判满

    void push(T x); // 压栈

    T pop();    // 弹栈

};

在这个类中,我们使用一个数组data来存储数据,使用一个整数top来表示栈顶指针,使用一个整数size来表示栈的大小。接下来,我们依次实现类中的各个方法。

构造函数:一般情况下,我们需要为栈指定一个大小。在构造函数中,我们可以为data数组分配内存,并将top初始化为-1。


template<class T>

Stack<T>::Stack(int s) {

  data = new T[s];

  top = -1;

  size = s;

}

析构函数:在程序结束时,我们需要释放data数组所占用的内存。


template<class T>

Stack<T>::~Stack() {

  delete[] data;

}

判空函数和判满函数:在实现这两个函数时,我们只需要判断top指针是否等于-1或等于size-1即可。


template<class T>

bool Stack<T>::empty() {

  return top == -1;

}

template<class T>

bool Stack<T>::full() {

  return top == size-1;

}

压栈函数:在压栈函数中,我们需要判断栈是否已满,如果不满,则将元素x加入到data数组中,并将top指针加1。


template<class T>

void Stack<T>::push(T x) {

  if(full()) {

    cout << "Stack is full!" << endl;

    return;

  }

  top++;

  data[top] = x;

}

弹栈函数:在弹栈函数中,我们需要判断栈是否为空,如果不为空,则将栈顶元素弹出,并将top指针减1。


template<class T>

T Stack<T>::pop() {

  if(empty()) {

    cout << "Stack is empty!" << endl;

    return 0;

  }

  T x = data[top];

  top--;

  return x;

}

到此为止,我们已经完成了自定义栈类的实现。使用起来也非常简单,只需要按照以下方式即可:


Stack<int> s(10); // 实例化一个栈对象,大小为10

s.push(1);     // 压入一个整数1

s.push(2);     // 压入一个整数2

int x = s.pop();  // 弹出一个整数,值为2

在C++中自定义栈类并不难,而且可以灵活地定制栈类的各种属性和方法,以满足个性化的需求。但是,在实际编程时,我们应该尽量使用标准库提供的容器类,避免重复造轮子,提高代码的可读性和可维护性。

  
  

评论区

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