zoukankan      html  css  js  c++  java
  • 栈的链式实现

    //////////////////////////////////////////////////////////////////////////
    // 栈的链式实现
    // 2011-5-2 by kida#163.com
    //
    
    template <typename T>
    class Stack
    {
    public:
    	typedef T value_type;
    	typedef value_type& reference;
    	typedef const value_type& const_reference;
    
    private:
    	// 链栈的节点数据结构
    	typedef struct Node
    	{
    		value_type key;
    		Node* next;
    	}Node;
    
    private:
    	Node* top; // 栈顶指针
    
    public:
    	Stack() : top(NULL) {}
    	~Stack()
    	{
    		try
    		{
    			SetEmpty();
    		}
    		catch(...)
    		{
    			// do nothing
    		}
    	}
    
    public:
    	// 入栈
    	void Push(const_reference x) throw(char*)
    	{
    		Node* p = new Node;
    		if ( !p )
    		{
    			throw "allocate memery failure";
    		}
    
    		p->key = x;
    
    		// 插入链栈头部
    		p->next = top;
    		top = p;
    	}
    
    	// 出栈
    	value_type Pop() throw(char*)
    	{
    		if ( IsEmpty() )
    		{
    			throw "stack is empty";
    		}
    
    		// 存储栈顶节点的值
    		value_type tmp = top->key;
    
    		// 移除栈顶节点
    		Node* p = top;
    		top = top->next;
    		delete p;
    
    		return tmp;
    	}
    
    	// 清空栈
    	void SetEmpty()
    	{
    		Node* p = NULL;
    
    		while (top)
    		{
    			Node* p = top;
    			top = top->next;
    			delete p;
    		}
    	}
    	
    	// 是否栈为空
    	bool IsEmpty() const { return !top; }
    };
    优点:没有最大元素个数容量限制。
    缺点:和顺序栈相比,链栈的入栈和出栈操作,涉及到存储空间的申请和释放,效率比顺序栈慢。
    综合比较:对于频繁存取同时容量比较固定的情况下,请用顺序栈,Windows系统中,每个程序都对应一个栈空间,该栈空间就是顺序栈,其大小是固定的。
    而对于低峰元素个数和高峰元素个数差异很大的情况,请用链栈。
  • 相关阅读:
    百度搜索技巧
    phpstorm知识点
    A-Z
    边框
    display
    布局
    盒模型
    浮动
    字体与图标
    pselect 问题
  • 原文地址:https://www.cnblogs.com/csuchao/p/2034532.html
Copyright © 2011-2022 走看看