2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 с++ стеки
Сообщение28.05.2012, 16:51 
Здравствуйте!
Как бы не глупо звучало условие моей задачи,но преподаватель поставил мне ее так: Дана последовательность целых чисел. Поменять местами максимальный элемент и первый. Сделать это с помощью стека.


Я не понимаю двух вещей...по какому принципу ищется максимальный элемент в стеке????
И как менять местами 2 элемента? (мой вариант - поместить первый в какую-нибудь область памяти,удалить с первого "места",вставить туда максимальный,а на место удаленного максимального воткнуть первый,который был перед этим где-то сохранен.Не слишком неправильно???)
Объясните мне,пожалуйста,эти 2 пунктика(((((

 
 
 
 Re: с++ стеки
Сообщение28.05.2012, 17:23 
Наверно, в стеке менять местами элементы не нужно.

 
 
 
 Re: с++ стеки
Сообщение28.05.2012, 17:35 
Но как же тогда решить поставленную задачу?

 
 
 
 Re: с++ стеки
Сообщение28.05.2012, 17:51 
Вам же надо поменять местами элементы не в стеке, а в данной последовательности. Менять местами элементы стека — использовать его не по назначению.

 
 
 
 Re: с++ стеки
Сообщение31.05.2012, 19:44 
Наверное имелось в виду "с помощью стека". А это можно понимать, например, как задачу организации поиска максимального элемента в массиве по аналогии с рекурсивными процедурами.

 
 
 
 Re: с++ стеки
Сообщение03.06.2012, 16:23 
вот программа,которую я написала.
она компилируется,но просто заменяет максимальный элемент произвольным числом,а надо,чтобы заменял первым элементом стека.
Пожалуйста,помогите...
Укажите на ошибку в коде.

код: [ скачать ] [ спрятать ]
Используется синтаксис C++
  1. #include <iostream>
  2. using namespace std;
  3. struct tstack
  4. { int inf;
  5. tstack *next;};
  6.  
  7. void push(tstack *&s, int item)// добавляем эл-т
  8. { tstack *r=new tstack;
  9.  r->inf=item;
  10.  r->next=s;
  11.  s=r;}
  12.  
  13. void pop(tstack *&s, int &i) //читаем стек
  14. {tstack *tmp;
  15. tmp=s;
  16.  i=s->inf;
  17. s=s->next;
  18. delete tmp;
  19. }
  20. int perviy(tstack *&s)//извлекаем первый элемент
  21. {tstack *r=s;
  22. int j=r->inf;
  23. s=r->next;
  24. delete r;
  25. return j;}
  26.  
  27.  
  28. int main() {
  29.  tstack *s,*d;
  30.  int b,c,r=0,j;
  31.  cout<<"vvedite kolvo chisel"<<endl;
  32.  int n;
  33.  cin>>n;
  34.  cout<<"vvedite chisla"<<endl;
  35.  cin>>b;
  36.  c=b;
  37.  for (int i=0; i<n-1; i++)//записываем эл-ты в стек
  38.  {push (s, b);
  39.  cin>>b;}
  40.  push (s, b); //добавляем эл-ты
  41.  for (int i=0; i<n; i++)
  42.  { pop(s,r);
  43.  if (r>c) c=r;
  44.  push(d,r);}
  45.   cout<<"ishodhiy steck"<<endl;
  46.  for (int i=0; i<n; i++)
  47.  {pop(d,r);
  48.  cout<<r<<" ";
  49.  push(s,r);}
  50.  cout<<endl;
  51.  
  52.  
  53.  
  54.  for (int i=0; i<n; i++)
  55.  {pop(s,r);
  56.  if (r==c)
  57.  perviy(s);
  58.   push(d,j);
  59. else push(d,r);
  60.  }
  61.  
  62.  cout<<"poluchenniy steck"<<endl;
  63.  for (int i=0; i<n; i++)
  64.  {pop (d,r);
  65.  cout<<r<<"\t";
  66.  }
  67.  cin.get();
  68.  cin.get();
  69.  return 0;
  70. }
  71.  

 i  killeraleksana, открывающий тег syntax надо ставить до программы (закрывающий -- после). А еще удобно добавлять опцию "lines=n" (при этом включается нумерация строк). Поправил.
/Toucan

 
 
 
 Re: с++ стеки
Сообщение04.06.2012, 14:36 
killeraleksana в сообщении #580250 писал(а):
она компилируется,но просто заменяет максимальный элемент произвольным числом,а надо,чтобы заменял первым элементом стека.
Пожалуйста,помогите...
Укажите на ошибку в коде.

Я не знаю как у вас, а у меня ваш текст бракует компилятор.
Цитата:
(59): E2054 Misplaced else

Вы естественно знаете, что там пропущено, а я исправил наугад.
После этого запустил и под отладчиком выяснил, вы забыли распределить память для переменной $s$, у вас имеется только указатель на нее. Исправьте. Дальше я не смотрел. С уважением,

 
 
 [ Сообщений: 7 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group