Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2013, 18:52   #21
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Определить класс стек. В класс включить два конструктора для определения стека по его размеру и путем копирования другого стека. Предусмотреть функции вычисления среднего арифметического из элементов стека и нахождения элемента по его номеру.
Поясните задачу - помогу.
Конструктор создает объект. До того, как отработает конструктор, стек не создан (и размера у него нет. Тогда что значит фраза, выделенная красным?

Стек таки должен иметь только 2 метода - pop и push. После обхода всех элементов стек остается пустой. Т.е. если мы найдем "элемент по его номеру" - то все элементы до этого номера из стека вытесним (аналогично с о среднеарифметическим).
Если требуется сохранить стек в первоначальном состоянии - мы должны использовать вспомогательный стек (или рекурсию {при этом таки используем системный стек в качестве вспомогательного}) - но это нерационально.

Стек вообще не предназначен для произвольного доступа к элементам, уточните у преподавателя что он хочет получить.

Цитата:
Это Вы как то узко мыслите. Увидели слово "стек" - все , только push и pop разрешено.
расскажи нам, серым, что еще может быть в стеке?
rrrFer вне форума Ответить с цитированием
Старый 12.10.2013, 19:47   #22
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

да все что угодно, смысл стека первый пришел последний ушел (ну или наоборот, каму как милее), вот эти ваши поп и пуш, и где запрещено чего другого?

вот из педии
Цитата:
В некоторых языках(например, Lisp, Python[3]) стеком можно назвать любой список, так как для них доступны операции pop и push.
и нет проблем.

Цитата:
Тогда что значит фраза, выделенная красным
это даже серым должно быть понятно параметром сайз передать, не?
eval вне форума Ответить с цитированием
Старый 12.10.2013, 19:56   #23
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
вот из педии
нашли что цитировать. Педию пишут школьники, всем известно.
Цитата:
это даже серым должно быть понятно параметром сайз передать, не?
ты пнимаешь, что стек - это не массив. Какой смысл в него сайз передавать?

Суть не только в том, какой интерфейс предоставляет контейнер. но и за какое время он выполняет операции, а также, как он хранит элементы (стек не должен требовать непрерывную область памяти для своего хранения, в отличии от массива).
Стек должен позволять добавить элемент в начало и удалить элемент из начала с оценкой времени О(1). То что описано выше он должен гарантировать. Все остальное он не гарантирует (но ты можешь сделать, если очень хочется. В теме вам товарищ уже предлагал дек запилить).

simples
Цитата:
Стандартный стек это обычный массив с методами позволящими вставлять/извлекать данные по FIFO/LIFO алгоритму.
довай кодом, я не представляю как ты в массив будешь за О(1) элементы добавлять.
rrrFer вне форума Ответить с цитированием
Старый 12.10.2013, 20:05   #24
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Педию пишут школьники, всем известно.
да вопрос нет, жаль что вы не пишите..
и я так понимаю что та цитат не имеет ничего общего с реальностью, и вы знаете истину? так скорее поведайте нам ее
Цитата:
ты пнимаешь, что стек - это не массив. Какой смысл в него сайз передавать?
любой стек имеет ограничение по сайзу, толи это связано с физикой, толи с логикой, почему я не могу устанавливать его руками? определенно это не запрещено

Цитата:
довай кодом, я не представляю как ты в массив будешь за О(1) элементы добавлять
. сложно проверку вставить? и эксепшн вывалить, к примеру, если чё, я что-то не понимаю где тут трудности
eval вне форума Ответить с цитированием
Старый 12.10.2013, 20:19   #25
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
любой стек имеет ограничение по сайзу, толи это связано с физикой, толи с логикой, почему я не могу устанавливать его руками? определенно это не запрещено
потому что размер стека если и ограничен, то особенностями среды выполнения (объемом памяти и фичами ОС, возможно). И не надо свои руки совать куда не надо (стек ими ограничен быть не должен),
Цитата:
сложно проверку вставить? и эксепшн вывалить, к примеру, если чё, я что-то не понимаю где тут трудности
причем тут эксепшн вообще?
если не пнимаешь где трудности - покажи код., мне без разницы, эксепшн там будет или проверка. Пока что мне кажется ты не трудности не понимаешь, а вообще всего того, что выше написано. Потому что я не представляю как эксепшн влияет на оценку сложности. - я тебе про О(1), ты мне про эксепшн и долбаную википедию.
Цитата:
и вы знаете истину? так скорее поведайте нам ее
истины нет, но когда я беру класс стека, я от него кое что ожидаю (я описал что я от него хочу). И именно этого от него ожидают те, кто знает что такое стек.
http://www.cplusplus.com/reference/stack/stack/
Если этого тебе мало, что все нормальные люди ждут от стека именно такого поведения - посмотри на реализации в бусте, Qt еще где-нибудь.
Открой книжки Скиены, Кнута (если жизнь не дорога) или, хотя бы, Макконела.
rrrFer вне форума Ответить с цитированием
Старый 12.10.2013, 20:33   #26
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Цитата:
Стек должен позволять добавить элемент в начало и удалить элемент из начала с оценкой времени О(1). То что описано выше он должен гарантировать. Все остальное он не гарантирует (но ты можешь сделать, если очень хочется. В теме вам товарищ уже предлагал дек запилить).
Немного не так. Стек должен следовать LIFO. Как он это будет делать внутренне - без разницы. Поэтому за О(1) можно спокойно при push добавлять элемент в конец массива и двигать итератор вперед, а при pop - назад.
Размер для стека чисто гипотетически может быть нужен - если хочется его иметь либо на стеке, либо в куче.
still_alive вне форума Ответить с цитированием
Старый 12.10.2013, 20:39   #27
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Поэтому за О(1) можно спокойно при push добавлять элемент в конец массива и двигать итератор вперед, а при pop - назад.
А нет, все не так. Покажите тоже код. У массива есть предельный размер. Вы можете двигать итератор пока массив не кончится. Когда массив кончится, а вы добавите еще один элемент - то либо ваш стек кинет эксепшн (как предлагал eval), либо добавит элемент за О(n). Оба варианта ниразу со стеком не связаны (это не то поведение. которое ожидается)
Цитата:
Размер для стека чисто гипотетически может быть нужен - если хочется его иметь либо на стеке, либо в куче.
кого "его"? - размер? Если это будет текущий размер стека, а не предельный - я согласен (текущий размер стека может быть нужен). eval же пишет, что размер стека всегда ограничен и этот, предельный, размер может передаваться в конструктор.
Если вы о том же (если Вы понимаете, о чем говорит eval), то поясните мне пожалсто, зачем это делать?

Последний раз редактировалось rrrFer; 12.10.2013 в 20:46.
rrrFer вне форума Ответить с цитированием
Старый 12.10.2013, 20:39   #28
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Э-э-м, ребятки, ничего, что я со своим клювом в Вашу высокоинтеллектуальную беседу? Ну уже простите, но хотелось бы нам сирым знать, что же такое "сайз"?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 12.10.2013, 20:50   #29
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
эм, ну можно кнешно извратиться как угодно. Но зачем лишний раз двигать итератор? - какой из этого, хотя бы теоретически, может быть профит?

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

Не размер, а сам стек. В зависимости от размера стека мы можем хранить элементы либо в статическом буфере, либо, если его не хватает, выделять память в куче.

Сайз - подозреваю, что размер.
still_alive вне форума Ответить с цитированием
Старый 12.10.2013, 20:56   #30
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Реализация стека на основе массива самая простая и быстрая - при условии что память будет редко перераспределяться.
что это она самая быстрая?
доступ/удаление/вставка к первому элементу обычного, стека на связных списках - О(1).
к твоему массиву доступ/удаление - О(1), а вставка - О(1), НО ИНОГДА О(N) - это вообще не стек, т.е., оно не стабильно себя ведет и ненужно.

Я уже не говорю, что под твоими массивами памяти может быть выделено больше чем надо (но чем больше - тем реже ты получишь О(N) при вставке).

И еще раз, какой из этого профит? - я красным уже выделял. Массивы могут дать хорошее время произвольного доступа, но оно от стека не требуется. Что-то еще?
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cоздать класс жидкость. определить конструкторы деструкторы и функцию печати. создать публик производный класс. (С++) Динар Габбасов Помощь студентам 0 28.05.2012 18:44
Определить пользовательский класс... BoCbMou C# (си шарп) 0 18.04.2012 12:59
задача - определить Класс Andrew_s Visual C++ 2 13.12.2011 22:58
Определить, создан ли класс. Alex Cones Общие вопросы Delphi 4 14.01.2010 18:12
создать динамический Стек через класс шаблон Petruha-nsk Общие вопросы C/C++ 1 08.11.2009 12:41