当前位置 博文首页 > boyhailong的专栏:stack类C++实现

    boyhailong的专栏:stack类C++实现

    作者:[db:作者] 时间:2021-09-22 16:57

    自己写的stack类,功能可能很少,也可能里面很多错误,奋斗,但至少我测试的是正确的,鄙视

    代码奉上:

    #include <iostream>
    using namespace std;
    template <class T>
    class node
    {
    public:
    	node<T>* next;
    	T val;
    	node():next(NULL),val(){};
    	node(T v):next(NULL),val(v){};
    };
    template <class T>
    class my_stack
    {
    public:
    	my_stack();
    	~my_stack();
    	void init_stack();
    	bool is_empty();
    	size_t get_len();
        T* get_top();
    	void push(const T& e);
        void pop(T& e);
    	void display();
    private:
        node<T>* top;
        size_t len;
    };
    template <class T>
    my_stack<T>::my_stack()
    {
       top  = NULL;
       len = 0;
    }
    template <class T>
    my_stack<T>::~my_stack()
    {
    	node<T>* pre = top;
    	if (top)
    	{
           delete top;
    	   top = pre->next;
    	   pre = pre->next;
    	}
    	len = 0;
    }
    template <class T>
    bool my_stack<T>::is_empty()
    {
    	return len == 0;
    }
    template <class T>
    size_t my_stack<T>::get_len()
    {
    	return len;
    }
    template <class T>
    void my_stack<T>::push(const T& e)
    {
       node<T>* tmp = new node<T>(e);
       if (top == NULL)
       {
    	   top =tmp;
       }
       else
       {
    	   tmp->next = top;
    	   top = tmp;
       }
       ++len;
    }
    template <class T>
    void my_stack<T>::pop(T& e)
    {
    	if(is_empty())
    		throw new exception("The stack is empty!");
    	e = top->val;
        if (len ==1)
        {
    		top  = NULL;
        }
    	else
    	{
            node<T>* tmp = top;
            top = top->next;
    		delete tmp;
    	}
    	--len;
       
    }
    template <class T>
    void my_stack<T>::display()
    {
       node<T>* pre = top;
       cout << "The stack is: ";
       while(pre)
       {
    	   cout << pre->val << " ";
    	   pre = pre->next;
       }
       cout << endl;
    }
    int main()
    {
        my_stack<int> s;
    	s.push(1);
    	s.push(2);
    	s.display();
    	int e = 0;
    	s.pop(e);
    	s.display();
    	cout << e;
    }



    cs