• 使用C++模板实现栈的求最小值功能


    -----Test.h文件-----------------------------------------

    #ifndef	TEST_H
    #define TEST_H
    #include<iostream>
    using namespace std;
    template<class T>
    class CMyStack
    {
    private:
    	struct Item
    	{
    	public:
    		T data;
    		Item *next;
    		Item():next(NULL){}
    	};
    	Item *m_data;
    	Item *m_min;
    	CMyStack(const CMyStack&);
    	CMyStack& operator=(const CMyStack&);
    public:
    	CMyStack();
    	~CMyStack();
    	T &top();
    	bool empty();
    	void pop();
    	void push(const T &);
    	const T &min();
    };
    template<class T>
    CMyStack<T>::CMyStack():m_data(NULL),m_min(NULL){}
    template<class T>
    CMyStack<T>::~CMyStack()
    {
    	if(m_data!=NULL)
    	{
    
    		Item *p,*q;
    		p=m_data;
    		q=NULL;
    		while(p!=NULL)
    		{
    			q=p;
    			p=p->next;
    			delete q;
    		}
    	}
    }
    template<class T>
    T& CMyStack<T>::top()
    {
    	if(!empty())
    		return m_data->data;
    	else
    		throw exception("stack is empty");
    }
    template<typename T>
    bool CMyStack<T>::empty()
    {
    	if(m_data==NULL)
    		return true;
    	else
    		return false;
    }
    template<typename T>
    void CMyStack<T>::pop()
    {
    	if(!empty())
    	{
    		Item *p=m_data;
    		m_data=m_data->next;
    		delete p;
    		p=m_min;
    		m_min=m_min->next;
    		delete p;
    	}
    	else
    	{
    		throw exception("stack is empty");
    	}
    }
    template<typename T>
    void CMyStack<T>::push(const T &t)
    {
    	Item *p=new Item();
    	p->data=t;
        Item *q=new Item;
    	if(!empty())
    	{
    		if(t>m_min->data)
    		{
    			q->data=m_min->data;
    		}
    		else
    			q->data=t;
    	}
    	else
    	{
    		q->data=t;
    	}
    	q->next=m_min;
    	m_min=q;
    	p->next=m_data;
    	m_data=p;
    }
    template<typename T>
    const T &CMyStack<T>::min()
    {
    	if(!empty())
    	{
    		return m_min->data;
    	}
    	else
    	{
    		throw exception("stack is empty");
    	}
    }
    #endif
    

    ----------------------main.cpp中的调用-----------------------------------------------

    void main()
    { 
    	CMyStack<int> myStack;
    	int a;
    	for(int i=0;i<5;i++)
    	{
    		cin>>a;
    		myStack.push(a);
    		cout<<"min:"<<myStack.min()<<endl;
    	}
    	for(int i=0;i<5;i++)
    	{
    		cout<<"min:"<<myStack.min()<<endl;
    		myStack.pop();
    	}
    	system("pause");
    }
    

      

  • 相关阅读:
    C# a == b ? c :d 表示的意思
    Unity脚本的生命周期 同一脚本/不同脚本/游戏对象激没激活/脚本激没激活,几种情况下的Awake,OnEnable,Start的执行顺序
    算法复习之排序
    算法 复习
    第二章 寄存器
    第一章
    机械学习中的正负样本
    linux安装py3.6
    git管理策略
    jenkin报错hudson.plugins.git.GitExcept
  • 原文地址:https://www.cnblogs.com/dyc0113/p/3210713.html
Copyright © 2020-2023  润新知