用c++基于模板实现的一个可设置容量的栈(Stack)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liunan199481/article/details/82979147

介绍

  • 该程序是在c++14标准下编写的,目测c++11和17都是可以使用的
  • 使用的是clion+mingw编译通过

栈的介绍

  • 只能在栈顶插入和删除的一种数据结构
  • 满足后进先出的原则,所以适用于这种场景

具体实现介绍

  • 使用数组保存栈内容
  • 由于使用模板,改栈可以保存多种类型的数据
  • 基本操作是入栈和出栈

源码

  • 代码也在vs2008上编译通过,不过要在main函数中,return 0这行前一行加上:system(“pause”); 让控制台停留
#include <iostream>
template <class T>
class Stack
{
public:
    Stack(int);
    ~Stack();
    void push(T);
    T pop();
    int size();

private:
    void init(int);

private:
    int top;//栈顶
    int max_size;
    T* arry;
};
template <class  T>  Stack<T>::Stack(int stack_size) {
    init(stack_size);
}

template <class T> Stack<T>::~Stack() {
    delete []arry;
}

template <class T> void Stack<T>::push(T t) {
    if(top>=max_size)
    {
        std::cout<<"stack is overflow!"<<std::endl;
        return;
    }
    arry[top++] = t;

}

template <class T> T Stack<T>::pop() {
    if(top==0)
    {
        std::cout<<"Stack is empty! can't pop!"<<std::endl;
    }
    T t = arry[top-1];
    --top;
    return t;
}

template <class T> int Stack<T>::size() {
    return top;
}
template <class  T>  void Stack<T>::init(int stack_size) {
    if(stack_size<=0)
    {
        std::cout<<"Init failed!"<<std::endl;
        return;
    }
    top = 0;
    max_size = stack_size;
    arry = new T[stack_size];
}


int main() {
    Stack<int> s(10);
    s.push(1);
    s.push(2);
    std::cout<<"deleted elem:"<<s.pop()<<std::endl;
    std::cout<<"stack size:"<<s.size()<<std::endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/liunan199481/article/details/82979147