以下是限制因素:
我已经找到了约束为2的解决方案。但是当我使用STL创建一个满足约束条件1的堆栈时,堆栈没有被排序,输出与输入相同。
预期产出:5 4 3 2 1 我的输出:1 2 4 3 5
以下是代码:
#include<iostream>
#include<stack>
using namespace std;
void SortedInsert(stack<int> S,int x)
{
if(S.empty() || x > S.top())
S.push(x);
else
{
int temp = S.top();
S.pop();
SortedInsert(S,x);
S.push(temp);
}
}
void StackSort(stack<int> S)
{
if(!S.empty())
{
int x = S.top();
S.pop();
StackSort(S);
SortedInsert(S,x);
}
}
void main()
{
int arr[5] = {1,2,4,3,5};
stack<int> S;
for(int i=4 ; i>=0 ; i--)
S.push(arr[i]);
StackSort(S);
while(!S.empty())
{
cout<<S.top()<<" ";
S.pop();
}
cin.get();
}
答案 0 :(得分:2)
通过引用或作为指针传递堆栈。
&#34;参考&#34;的示例:
void StackSort(stack<int> &S)
{
if(!S.empty())
{
int x = S.top();
S.pop();
StackSort(S);
SortedInsert(S,x);
}
}
这样称呼:StackSort(S);
&#34;指针&#34;的示例:
void StackSort(stack<int> *S)
{
if(!S->empty())
{
int x = S->top();
S->pop();
StackSort(S);
SortedInsert(S,x);
}
}
这样称呼:StackSort(&S);
您需要相应地更改SortedInsert
。
答案 1 :(得分:2)
通过引用或指针传递堆栈。您目前只修改本地副本。
void StackSort(stack<int> &S)
或
void StackSort(stack<int> *S)