Найти следующий больший каждого элемента, используя стек - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь найти следующий больший элемент массива.Моя логика верна, и код не содержит ошибок, но я не могу получить выходные данные для каждого индекса.Я получаю его только для индекса 0. После этого он дает ошибку сегментации.Здесь a - это входной массив, n - это размер массива a, а next - это также массив, используемый для хранения непосредственного большего элемента a.

   void gofindnextelement(int a[],int next[],int n)
   {
    stack<int>s;
    s.push(0);
    int i,curr;
    for( i=1;i<n;i++){
         curr=a[i];
         while(a[s.top()]<curr && s.empty()==0){
         next[s.top()]=curr;
         cout<<"index=" << s.top()<<"--->"<<next[s.top()]<<endl;
         s.pop();
         } 
         s.push(i);

   }    
   while(s.empty()==0)
     { 

    next[s.top()]=-1;
    cout<<"index=" << s.top()<<"--->"<<next[s.top()]<<endl;
    s.pop();
    }

for(int i=0;i<n;i++)
cout<<next[i]<< " "<<endl;      

 }

1 Ответ

0 голосов
/ 30 мая 2018

Если s пусто, то s.top() вызывает неопределенное поведение.Так что

s.empty()==0 && a[s.top()]<curr

безопасно, а

a[s.top()]<curr && s.empty()==0

- нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...