zoukankan      html  css  js  c++  java
  • 简单链式栈(C++模版技术实现)

    下面代码仅供本人复习数据结构所用,实用性N低,各位飘过吧~~哈哈:>

    //
    // C++ 模版技术实现简单链式栈. 
    // 
    
    #include <cstdlib>
    #include <iostream>
    #include <iomanip>
    #include <stdexcept>
    
    // 链式栈类模版前置声明.
    template <typename T> class LinkedStack;
     
    //
    // 链式栈节点类模版. 
    // 
    template <typename T>
    class Node
    {
    	friend class LinkedStack<T>;
    	
    private:
    	T _value;
    	Node<T> *_pNext;
    
    public:
    	Node(void)
    		:_pNext(NULL)
    	{ NULL; }
    
    	Node(const T &val)
    		: _value(val)
    		, _pNext(NULL)
    	{ NULL; }	
    };
    
    //
    // 链式栈类模版. 
    //  
    template <typename T>
    class LinkedStack
    {
    private:
    	Node<T> *_pTop;
    	
    public:
    	LinkedStack(void);	
    	~LinkedStack(void);
    	bool isEmpty(void) const;
    	T getTop(void) const;
    	void push(const T &val);
    	T pop(void);
    
    };
    
    
    template <typename T>
    inline LinkedStack<T>::LinkedStack(void)
    	: _pTop(NULL)
    { NULL; } 
    
    
    template <typename T>
    LinkedStack<T>::~LinkedStack(void)
    {	
    	Node<T> *pDel = NULL;
    	
    	while (NULL != _pTop)
    	{
    		pDel = _pTop;
    		_pTop = _pTop->_pNext;
    		delete pDel;
    	}
    }
    
    
    template <typename T>
    inline bool LinkedStack<T>::isEmpty(void) const
    {
    	return NULL == _pTop;	
    }
    	
    template <typename T>
    inline T LinkedStack<T>::getTop(void) const
    {
    	if (isEmpty()) {
    		throw std::underflow_error("栈空下溢.");
    	}
    	return _pTop->_value;
    }
    		
    		
    template <typename T>
    inline void LinkedStack<T>::push(const T &val)
    {
    	Node<T> *pNew = new Node<T>(val);
    	
    	pNew->_pNext = _pTop;
    	_pTop = pNew;
    }
    		
    
    template <typename T>
    inline T LinkedStack<T>::pop(void)
    {
    	if (isEmpty()) {
    		throw std::underflow_error("栈空下溢.");
    	}
    	T value = _pTop->_value;
    	Node<T>* pDel = _pTop;
    	_pTop = _pTop->_pNext;
    	delete pDel;
    	
    	return value;
    }
    
    //
    // 测试栈. 
    // 
    int main(void)
    {
    	const size_t MAX_SIZE = 20;
    	LinkedStack<int> stack;
    	
    	std::cout << "栈" << (stack.isEmpty() ? "" : "不") << "为空." << std::endl; 
    	
    	for (size_t i = 0; i < MAX_SIZE; ++i)
    	{
    		stack.push(i);
    		std::cout << std::setw(3) << stack.getTop();
    	}
    	
    	std::cout << std::endl;
    	std::cout << "栈" << (stack.isEmpty() ? "" : "不") << "为空." << std::endl;  
    	
    	for (size_t i = 0; i < MAX_SIZE; ++i)
    	{
    		std::cout << std::setw(3) << stack.pop();
    	}
    	// std::cout << std::setw(3) << stack.pop();
    	
    	std::cout << std::endl;
    	std::cout << "栈" << (stack.isEmpty() ? "" : "不") << "为空." << std::endl;
    	
    	return EXIT_SUCCESS;
    }
    
  • 相关阅读:
    centos crash debug
    go get Unknown SSL protocol error in connection to gopkg.in
    Tensorflow serving with Kubernetes
    Spring 集成 Swagger UI
    Docker Registry V2 Garbage Collection
    Docker Registry V2 with Nginx
    Zabbix磁盘性能监控
    Zabbix CPU utilization监控参数
    Windows挂载Gluster复制卷
    Redis持久化存储(三)
  • 原文地址:https://www.cnblogs.com/wxxweb/p/2059411.html
Copyright © 2011-2022 走看看