C++如何使用一个栈实现另一个栈的排序算法-创新互联

小编给大家分享一下C++如何使用一个栈实现另一个栈的排序算法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

成都创新互联网站建设提供从项目策划、软件开发,软件安全维护、网站优化(SEO)、网站分析、效果评估等整套的建站服务,主营业务为成都网站制作、网站建设,App定制开发以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。成都创新互联深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

题目:

一个栈中元素类型为整型,现在想将该栈从顶到底按从小到大的顺序排序,只许申请一个辅助栈。

除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序?

算法C++代码:

class Solution
{
public:
  //借助一个临时栈排序源栈
  static void sortStackByStack(stack& s)
  {
    stack* sTemp = new stack;
    while (!s.empty())
    {
      int cur = s.top();
      s.pop();
      //当源栈中栈顶元素大于临时栈栈顶元素时,将临时栈中栈顶元素放回源栈
      //保证临时栈中元素自底向上从大到小
      while (!sTemp->empty() && cur > sTemp->top())
      {
        int temp = sTemp->top();
        sTemp->pop();
        s.push(temp);
      }
      sTemp->push(cur);
    }
    //将临时栈中的元素从栈顶依次放入源栈中
    while (!sTemp->empty())
    {
      int x = sTemp->top();
      sTemp->pop();
      s.push(x);
    }
  }
};

测试用例程序:

#include 
#include 
using namespace std;
class Solution
{
public:
  //借助一个临时栈排序源栈
  static void sortStackByStack(stack& s)
  {
    stack* sTemp = new stack;
    while (!s.empty())
    {
      int cur = s.top();
      s.pop();
      //当源栈中栈顶元素大于临时栈栈顶元素时,将临时栈中栈顶元素放回源栈
      //保证临时栈中元素自底向上从大到小
      while (!sTemp->empty() && cur > sTemp->top())
      {
        int temp = sTemp->top();
        sTemp->pop();
        s.push(temp);
      }
      sTemp->push(cur);
    }
    //将临时栈中的元素从栈顶依次放入源栈中
    while (!sTemp->empty())
    {
      int x = sTemp->top();
      sTemp->pop();
      s.push(x);
    }
  }
};
void printStack(stack s)
{
  while (!s.empty())
  {
    cout << s.top() << " ";
    s.pop();
  }
  cout << endl;
}
int main()
{
  stack* s = new stack;
  s->push(5);
  s->push(7);
  s->push(6);
  s->push(8);
  s->push(4);
  s->push(9);
  s->push(2);
  cout << "排序前的栈:" << endl;
  printStack(*s);
  Solution::sortStackByStack(*s);
  cout << "排序后的栈:" << endl;
  printStack(*s);
  system("pasue");
}

运行结果:

排序前的栈:
2 9 4 8 6 7 5
排序后的栈:
9 8 7 6 5 4 2

以上是“C++如何使用一个栈实现另一个栈的排序算法”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联网站建设公司行业资讯频道!

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:C++如何使用一个栈实现另一个栈的排序算法-创新互联
文章路径:http://myzitong.com/article/gsgis.html