2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 с++ стеки
Сообщение28.05.2012, 16:51 


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


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

 Профиль  
                  
 
 Re: с++ стеки
Сообщение28.05.2012, 17:23 
Заслуженный участник


27/04/09
28128
Наверно, в стеке менять местами элементы не нужно.

 Профиль  
                  
 
 Re: с++ стеки
Сообщение28.05.2012, 17:35 


12/05/12
19
Но как же тогда решить поставленную задачу?

 Профиль  
                  
 
 Re: с++ стеки
Сообщение28.05.2012, 17:51 
Заслуженный участник


27/04/09
28128
Вам же надо поменять местами элементы не в стеке, а в данной последовательности. Менять местами элементы стека — использовать его не по назначению.

 Профиль  
                  
 
 Re: с++ стеки
Сообщение31.05.2012, 19:44 


23/12/07
1763
Наверное имелось в виду "с помощью стека". А это можно понимать, например, как задачу организации поиска максимального элемента в массиве по аналогии с рекурсивными процедурами.

 Профиль  
                  
 
 Re: с++ стеки
Сообщение03.06.2012, 16:23 


12/05/12
19
вот программа,которую я написала.
она компилируется,но просто заменяет максимальный элемент произвольным числом,а надо,чтобы заменял первым элементом стека.
Пожалуйста,помогите...
Укажите на ошибку в коде.

код: [ скачать ] [ спрятать ]
Используется синтаксис 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 


01/07/08
836
Киев
killeraleksana в сообщении #580250 писал(а):
она компилируется,но просто заменяет максимальный элемент произвольным числом,а надо,чтобы заменял первым элементом стека.
Пожалуйста,помогите...
Укажите на ошибку в коде.

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

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group