careercup-栈与队列 3.6

3.6 编写程序,按升序对栈进行排序(即最大元素位于栈顶)。最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中(如数组)。该栈支持如下操作:push、pop、peek和isEmpty。

 

解答

 

使用一个附加的栈来模拟插入排序。将原栈中的数据依次出栈与附加栈中的栈顶元素比较, 如果附加栈为空,则直接将数据压栈。否则, 如果附加栈的栈顶元素小于从原栈中弹出的元素,则将附加栈的栈顶元素压入原栈。 一直这样查找直到附加栈为空或栈顶元素已经大于该元素, 则将该元素压入附加栈。

C++实现代码:

#include<iostream>

#include<stack>

using namespace std;



void stackSort(stack<int> &st)

{

    stack<int> t;

    while(!st.empty())

    {

        int data=st.top();

        st.pop();

        while(!t.empty()&&t.top()<data)

        {

            st.push(t.top());

            t.pop();

        }

        t.push(data);

    }

    while(!t.empty())

    {

        st.push(t.top());

        t.pop();

    }

}



int main()

{

    stack<int> st;

    int arr[10]={2,4,6,1,3,5,7,8,9,0};

    for(int i=0;i<10;i++)

        st.push(arr[i]);

    stackSort(st);

    while(!st.empty())

    {

        cout<<st.top()<<" ";

        st.pop();

    }

    cout<<endl;

}

 

你可能感兴趣的:(UP)