2015-10-05 3 views
-3

Вот ограничение:Как передать стек функции, когда функция изменяет стек?

  1. только STL должна быть использована для создания стеки (не используйте-структуру для создания стеки)
  2. Сортировать стек без использования каких-либо петель

я разобрался решение с ограничением 2. Но когда я создаю стек, используя STL, чтобы удовлетворить ограничение 1, стек не сортируется, а выход такой же, как и вход.

Ожидаемый выход: 5 4 3 2 1 Мой выход: 1 2 3 4 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(); 
} 

ответ

2

Pass стек по ссылке или в качестве указателя.

Пример "по ссылке":

void StackSort(stack<int> &S) 
{ 
    if(!S.empty()) 
    { 
     int x = S.top(); 
     S.pop();   
     StackSort(S); 
     SortedInsert(S,x); 
    } 
} 

Назовите это так: StackSort(S);

Пример "по указателю":

void StackSort(stack<int> *S) 
{ 
    if(!S->empty()) 
    { 
     int x = S->top(); 
     S->pop();   
     StackSort(S); 
     SortedInsert(S,x); 
    } 
} 

Назовите это так: StackSort(&S);

Вам необходимо указать ge SortedInsert соответственно.

2

Передача стеков по ссылке или указателем. В настоящее время вы только изменяете локальные копии.

void StackSort(stack<int> &S) 

или

void StackSort(stack<int> *S)