zoukankan      html  css  js  c++  java
  • 014敲代码将一个栈按升序排序,对这个栈是怎样实现的,你不应该做不论什么特殊的如果(keep it up)

    敲代码将一个栈按升序排序。

    对这个栈是怎样实现的,你不应该做不论什么特殊的如果。
    程序中能用到的栈操作有:push | pop |isEmpty
    最easy想到的就是优先队列来做此题。easy实现。

    另外我们能够再用一个栈来实现栈的升序排列。

    优先队列:

    //优先队列来实现
    void sortStack(std::stack<int>& vStk)
    {
    	std::priority_queue<int, std::vector<int>, std::greater<int>> Queue;
    	while (!vStk.empty())
    	{
    		Queue.push(vStk.top());
    		vStk.pop();
    	}
    
    	while (!Queue.empty())
    	{
    		vStk.push(Queue.top());
    		Queue.pop();
    	}
    }

    附加栈来实现:

    //附加一个栈来实现
    void sortStack_(std::stack<int>& vStk)
    {
    	std::stack<int> Tmp;
    	while (!vStk.empty())
    	{
    		int Top = vStk.top();
    		vStk.pop();
    		while (!Tmp.top() && Top < Tmp.top())
    		{
    			vStk.push(Tmp.top());
    			Tmp.pop();
    		}
    		Tmp.push(Top);
    	}
    }

    另外一种算法有个极端的測试列子:假设原来栈的数据底部到顶部是从小到大的。比如:
    1 2 3 4 5 6 7
    那么Tmp每次push一个不同的数就要清空栈中的全部数据。比方某时刻
    vStk:1 2 3 4 5
    Tmp:6 7
    当Tmp要push 5的时候就要清空6 7,然后在push5,这时候vStk栈的数据添加:
    vStk: 1 2 3 4 7 6
    Tmp: 5

  • 相关阅读:
    HDU5772 (最小割)
    HDU 4971 (最小割)
    暑期集训个人赛1
    HDU 5644 (费用流)
    HDU5619 (费用流)
    暑假集训热身赛
    构建之法阅读笔记05
    找小水王
    找水王
    Runner站立会议之个人会议(冲刺二)
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6732914.html
Copyright © 2011-2022 走看看