zoukankan      html  css  js  c++  java
  • 使用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++实现
    Activity的onSaveInstanceState()和onRestoreInstanceState()方法
    一段代码引发的血案
    Android核心基础(十)
    paip.提升性能--- mysql 建立索引 删除索引 很慢的解决.
    求数组的子数组之和的最大值
    HDU 1576 A/B(数论)
    脚本控制向Android模拟拨打电话,发送短信,定位设置功能
    [置顶] java ant 配置及构建项目
    paip.输入法编程---智能动态上屏码儿长调整--.txt
  • 原文地址:https://www.cnblogs.com/dyc0113/p/3210713.html
Copyright © 2011-2022 走看看