Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа со Стеком

2.2K
24 декабря 2009 года
S@tana
53 / / 15.10.2009
Помогите разобраться со стеком!
Нашел как добавить элемент и как распечатать стек.
Подскажите как удалить или заменить конкретный элемент.

Со стеком работаю с использованием библиотеки <stack>

P.S. Если такой вопрос уже поднимался на форуме плз киньте ссылку!
1
24 декабря 2009 года
kot_
7.3K / / 20.01.2000
использование поиска по форуму является обязательным. За создание сообщений типа "не нашол кинте ссылку" вы получаете 5 баллов нарушения.
Удаление элементов в стеке выполняется вызовом функции pop()
Добавление/удаление элементов в стандартном стеке выполняется по принципу LIFO. Произвольный доступ к элементам отсутсвует.
2.2K
25 декабря 2009 года
S@tana
53 / / 15.10.2009
Поиском я пользовался! и все темы в которых речь шла о стеках я прочитал.
Сори конечно за такой пост!

Разве pop() не удоляет только верхний элемент стека?
1
25 декабря 2009 года
kot_
7.3K / / 20.01.2000
естественно.
В стеке ВСЕ помещается и удаляется с вершины.
Абреввиатура LIFO - "последним пришел первым ушел".
Поэтому это и называется стеком - вы же не пытаетесь из стоящих друг на друге 10 ящиков вытащить 5-й?
2.2K
25 декабря 2009 года
S@tana
53 / / 15.10.2009
Тогда не могли бы вы подсказать как изменить допустим 3 элемент стека (всего в стеке допустим 6 элементов)
1
25 декабря 2009 года
kot_
7.3K / / 20.01.2000
Цитата: S@tana
Тогда не могли бы вы подсказать как изменить допустим 3 элемент стека (всего в стеке допустим 6 элементов)


если перед вами стоит задача менять 3-й элемент стека (опять же третий откуда?), то варианта три - либо вам нужно убрать с вершины нужное количество элементов, изменить необходимый и поместить все обратно. Или же вам нужен не стек. Или же вам нужен стек - но "третий элемент откудато" вам менять не нужно.
Если у вас есть необходимость изменять элементы не извлекая их в произвольной позиции - используйте вектора, списки и т.п.

1
25 декабря 2009 года
kot_
7.3K / / 20.01.2000
Ну или реализовать свой вариант стека - но тогда это будет изготовлением велосипеда, у которого одно колесо треугольное, а второе квадратное. Для того что бы ездить по лестницам. :)
Вначале опишите почему вы собственно используете стек - а не вектор например - для которого операция добавления в конец по стоимости такая же как у стека? Но при том возможен доступ к произвольному элементу по индексу.
2.2K
25 декабря 2009 года
S@tana
53 / / 15.10.2009
Стек использую потому что это условие задачи!
Вот собственно сам текст задачи если че.

Написать программу для решения задачи. Для хранения данных использовать контейнер. В качестве контейнера использовать стек.
Исходные данные брать из текстового файла с именем «test.txt». Файл сдается вместе с работой и должен содержать не менее 10 записей. В начале работы программы данные загру-жаются в контейнер, а пользователю предлагается меню. Обязательно должно быть реализова-но выполнение следующих функций:

1. добавления в конец;
2. удаления элемента;
3. замены элемента;
4. печати содержимого контейнера;


С 1 и 4 разобрался там все очнь легко, а вот как остальное сделать я не наю.
1
25 декабря 2009 года
kot_
7.3K / / 20.01.2000
хм. Но тут же возможна работа с итератором? Возможна.
Удаление можно делать используя дополнительный стек. Даже пожалуй это единственный выход.
Ну а - на ходу не хочу давать рекомендаций - но на первый взгляд я бы реализовал бы шаблон функции для модификации, куда передавал бы указатель на начало стека и итератор, который должен возвращаться функцией поиска. Гдето примерно так. Посмотрите примеры работы с STL, реализации поиска элементов в массиве.
Вечером, если время будет напишу подробнее. Но это не значит что вы сидите и ждете до вечера - вы ищите и смотрите - я буду заниматься этой задачей только при вашем не посредственном участии.
Кстати покажите как вы распечатываете стек? Модификация будет тоже самое, только будет еще третий параметр - что модифицировать. При условии конечно, что вы нормально ее реализовали.
1
26 декабря 2009 года
kot_
7.3K / / 20.01.2000
Я так понял автор потерял интерес?
2.2K
28 декабря 2009 года
S@tana
53 / / 15.10.2009
Нет не потерял! просто доступа в нет небыло на выходных.
вот как я распечатываю стек
 
Код:
while (!mystack.empty())
  {
     cout << " " << mystack.top();
     mystack.pop();
  }
  cout << endl;


Цитата:
Удаление можно делать используя дополнительный стек.



Я тоже так подумал... СЕйчас вот пытаюсь реализовать это.

1
28 декабря 2009 года
kot_
7.3K / / 20.01.2000
Цитата: S@tana
Нет не потерял! просто доступа в нет небыло на выходных.
вот как я распечатываю стек
 
Код:
while (!mystack.empty())
  {
     cout << " " << mystack.top();
     mystack.pop();
  }
  cout << endl;


но ведь по сути ты не РАСПЕЧАТЫВАЕШЬ стек - ты его ОЧИЩАЕШЬ?
Я думаю ты вряд ли был бы очень рад если бы печать документа его бы уничтожала? :)
в твоей задаче ключевое - использование ИТЕРАТОРОВ - константных (для печати) и не константных (если предполагается модификация данных в стеке). Отправная точка для тебя - это вершина стека. Начиная от вершины ты должен перебирать элементы до тех пор пока итератор не за пределами стека, либо до тех пор - пока не выполнится условие.

1
28 декабря 2009 года
kot_
7.3K / / 20.01.2000
Либо второй вариант - если предполагать классическое понимание стека - тогда тебе необходимо во всех задачах обязательно использовать дополнительный стек.
2.2K
28 декабря 2009 года
S@tana
53 / / 15.10.2009
Завтро вечером сяду конкретно разбираться с задачей...
Потом отпишусь что получилось.

Скорее всего буду делать через допонительный стек!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог